将IQueryable<T>或LINQ查询转换为唯一字符串

3

我有一些基于LINQ查询的代码(或者基于LINQ查询的IQueryable<T>对象),我想根据这个查询获取一些唯一的字符串。

例如,我有以下代码:

var someValue = 10;
var query = (from i in db.Customers
            where i.Id == someValue
            select i).AsQueryable();

我应该得到这样的东西:

"from i in db.Customers where i.Id == 10"

我试图使用 Expression 对象并尝试操作它,但是我无法获得通用方法来获取具有确切参数值的字符串。

例如:

public string GetKey<T>(IQueryable<T> query)
{
  ...
  return unique_string;
}

请注意,对于相同的LINQ查询,不同的参数值应提供不同的字符串。
提前感谢。
2个回答

3

我强烈怀疑这根本行不通。除此之外,如果你必须使用 AsQueryable (即如果你的原始查询是基于 IEnumerable<T> 的),那么编译器将首先使用委托而不是表达式树。

如果它是一个完全纯净的 IQuerable<T>,你可以尝试使用 query.Expression.ToString(),但老实说,这不是我想要依赖的东西。


0

通过对表达式树序列化进行一些改进,解决了这个问题,以获取传递参数的确切值。它基于IQueryable对象提供了一个庞大但独特的XML文件。


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