我有一些LINQ查询(或基于LINQ查询的IQueryable<T>
对象),并希望根据此查询获得一些唯一的字符串。
我有,例如:
var someValue = 10;
var query = (from i in db.Customers
where i.Id == someValue
select i).AsQueryable();
我应该得到这样的东西:
“来自我的db.Customers,其中i.Id == 10”
我正在尝试使用Expression对象并使用它,但我无法获得通用方法来获取精确参数值的字符串。
E.g:
public string GetKey<T>(IQueryable<T> query)
{
...
return unique_string;
}
请注意,同一LINQ查询的不同参数值应提供不同的字符串。
提前致谢。
答案 0 :(得分:3)
我强烈怀疑这根本不起作用。除此之外,如果你必须使用AsQueryable
(即如果你的原始查询超过IEnumerable<T>
,那么编译器将使用委托代替表达式树来开始。
如果它一直是纯 IQuerable<T>
,你可以尝试使用query.Expression.ToString()
,但坦率地说,这不是我想要依赖的东西。
答案 1 :(得分:0)
使用Expression Tree Serialization解决了这个问题,并对获取传递参数的确切值进行了一些改进。它提供了一个基于IQueryable对象的大而唯一的 XML文件。