gpt4 book ai didi

entity-framework - 如何获取 Entity Framework 查询的参数?

转载 作者:行者123 更新时间:2023-12-01 13:13:10 25 4
gpt4 key购买 nike

如果我创建一个查询 IQueryable<T> ,我可以调用 .ToString() 来获取将被调用的 SQL,但该 SQL 可能包含@p__linq__0、@p__linq__1 等参数。有没有办法从 IQueryable<T> 中获取这些参数及其值

最佳答案

根据我的经验,这非常复杂,但是这段代码让我做到了:

        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()}");
}
请注意,此代码仅适用于 IQueryable<T>实际上是 DbQuery<T> 的对象,由 Entity Framework 创建。如果您打算将其包装在实用程序方法中,则可能需要进行一些类型检查。

关于entity-framework - 如何获取 Entity Framework 查询的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38015157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com