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

本文关键字:LINQ 查询 唯一 字符串 IQueryable 转换 | 更新日期: 2023-09-27 18:16:42

我有一些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. "i.Id == 10"

我试图使用表达式对象和玩它,但我不能得到通用的方法来获得字符串与确切的参数值。

例如:

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

注意,对于同一个LINQ查询,不同的参数值应该提供不同的字符串。

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

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

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

用表达式树序列化解决了这个问题,并改进了获取传递参数的精确值。它提供了一个大而独特的 XML文件,基于可查询对象。