private static T getPrivate<T>(this object obj, string privateField)
{
return (T)obj?.GetType()
.GetField(privateField, BindingFlags.Instance | BindingFlags.NonPublic)
?.GetValue(obj);
}
public static string ToSql<TEntity>(this IQueryable<TEntity> query) where TEntity : class
{
var enumerator = query.Provider.Execute<IEnumerable<TEntity>>(query.Expression).GetEnumerator();
var relationalQueryContext = enumerator.getPrivate<RelationalQueryContext>("_relationalQueryContext");
var relationalCommandCache = enumerator.getPrivate<RelationalCommandCache>("_relationalCommandCache");
#pragma warning disable EF1001 // Internal EF Core API usage.
IRelationalCommand command = relationalCommandCache.GetRelationalCommand(relationalQueryContext.ParameterValues);
#pragma warning restore EF1001 // Internal EF Core API usage.
return command.CommandText;
}
沒有留言:
張貼留言
你好!歡迎你在我的 Blog 上留下你寶貴的意見。