从Linqkit获取SQL字符串

3

我该如何从 LinqKit.ExpandableQuery<T> 中返回SQL?
我正在使用 stevefenton.co.uk 的代码,但似乎在以下部分出现了问题:

private static System.Data.Entity.Core.Objects.ObjectQuery<T> GetQueryFromQueryable<T>(IQueryable<T> query)
        {
            var internalQueryField = query.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Where(f => f.Name.Equals("_internalQuery")).FirstOrDefault();
            var internalQuery = internalQueryField.GetValue(query);
            var objectQueryField = internalQuery.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Where(f => f.Name.Equals("_objectQuery")).FirstOrDefault();
            return objectQueryField.GetValue(internalQuery) as System.Data.Entity.Core.Objects.ObjectQuery<T>;
        }

internalQueryField为空时,会出现问题。

这与继承树(LinqKit + Linq)有关,但我无法理解...:(

1个回答

4
string sql = query.ToString();

当程序员的大脑出现问题时,他/她会做一些奇怪的事情,我已经做过很多次了,不用担心 ;) - Ashkan Mobayen Khiabani
我非常确信它不会起作用,以至于我甚至都没有尝试 :) - grmbl
1
在 .Net core 2.2 中似乎无法工作。你只会得到一个反射字符串,即“value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[my.object.typehere])”。 - Microsoft Developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接