Entity framework 如何获取实体框架查询的参数?

Entity framework 如何获取实体框架查询的参数?,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,如果我创建一个查询IQueryable,我可以调用.ToString()来获取将被调用的SQL,但该SQL可能包含@p_uulinq_u0、@p_ulinq_u1等参数。有没有办法从IQueryable中获取这些参数及其值,以我的经验来看,这非常复杂,但是这个密码把我带到了那里: var dbQuery = (DbQuery<T>)query; // get the IInternalQuery internal variable from the D

如果我创建一个查询
IQueryable
,我可以调用.ToString()来获取将被调用的SQL,但该SQL可能包含@p_uulinq_u0、@p_ulinq_u1等参数。有没有办法从
IQueryable

中获取这些参数及其值,以我的经验来看,这非常复杂,但是这个密码把我带到了那里:

        var dbQuery = (DbQuery<T>)query;
        // get the IInternalQuery internal variable from the DbQuery object
        var iqProp = dbQuery.GetType().GetProperty("InternalQuery", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
        var iq = iqProp.GetValue(dbQuery, null);
        // get the ObjectQuery internal variable from the IInternalQuery object
        var oqProp = iq.GetType().GetProperty("ObjectQuery", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
        var objectQuery = (ObjectQuery<T>)oqProp.GetValue(iq, null);

        var sqlString = objectQuery.ToTraceString(); // this will populate the parameters collection
        foreach (var objectParam in objectQuery.Parameters)
        {
            Console.WriteLine($"{objectParam.Name} = {objectParam.Value.ToString()}");
        }
var-dbQuery=(dbQuery)查询;
//从DbQuery对象获取IInternalQuery内部变量
var iqProp=dbQuery.GetType().GetProperty(“InternalQuery”,BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
var iq=iqProp.GetValue(dbQuery,null);
//从IInternalQuery对象获取ObjectQuery内部变量
var oqProp=iq.GetType().GetProperty(“ObjectQuery”,BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
var objectQuery=(objectQuery)oqProp.GetValue(iq,null);
var sqlString=objectQuery.ToTraceString();//这将填充参数集合
foreach(objectQuery.Parameters中的var objectParam)
{
WriteLine($“{objectParam.Name}={objectParam.Value.ToString()}”);
}

请注意,此代码仅适用于由实体框架创建的实际为
DbQuery
IQueryable
对象。如果您打算将其包装在实用程序方法中,可能需要进行一些类型检查。

这似乎只有在我缓慢地完成代码时才起作用。否则,
参数
属性为空。我能做些什么来保证参数会被填充吗?我想我现在知道了。我必须先打电话给ToString询问我的问题。它必须只解析/填充一次调用的内容。