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

时间:2011-12-01 09:02:26

标签: c# .net linq expression-trees iqueryable

我有一些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查询的不同参数值应提供不同的字符串。

提前致谢。

2 个答案:

答案 0 :(得分:3)

我强烈怀疑这根本不起作用。除此之外,如果你必须使用AsQueryable(即如果你的原始查询超过IEnumerable<T>,那么编译器将使用委托代替表达式树来开始。

如果它一直是 IQuerable<T>,你可以尝试使用query.Expression.ToString(),但坦率地说,这不是我想要依赖的东西。

答案 1 :(得分:0)

使用Expression Tree Serialization解决了这个问题,并对获取传递参数的确切值进行了一些改进。它提供了一个基于IQueryable对象的大而唯一的 XML文件。