如何以编程方式将 LINQ 查询转换为正确描述 linq 表达式的可读英文文本?
Posted
技术标签:
【中文标题】如何以编程方式将 LINQ 查询转换为正确描述 linq 表达式的可读英文文本?【英文标题】:How do I programmatically translate a LINQ query to readable English text that correctly describes the linq expression? 【发布时间】:2010-06-08 16:27:38 【问题描述】:我正在开发一个项目,该项目使用 Albahari 的 PredicateBuilder 库 http://www.albahari.com/nutshell/ 在运行时动态创建 linq 表达式。我想找到一种方法,在运行时将这个动态创建的 Expression
我以静态创建的 linq 语句为例:
来自购买中的 p 选择p 其中 p.Price > 100 && p.Description != "Bike"。
对于这个 linq 语句,我想在运行时动态生成一个英文描述,如下所示:
“您正在搜索价格大于 100 且描述不是自行车的购买”。
是否有任何已经存在的库可以实现此目标,请记住我正在使用 PredicateBuilder 动态生成 where 谓词。如果不存在解决方案,您将如何构建解决方案?
谢谢!
【问题讨论】:
我还没有看到任何这样做的东西,但你可以为它写一个表达式树访问者msdn.microsoft.com/en-us/library/bb882521(VS.90).aspx。 这似乎是一个大胆的目标。祝你好运。 【参考方案1】:这引起了我的注意,所以我 downloaded ExpressionSerializationTypeResolver.cs 和 ExpressionSerializer.cs 然后我:
class Purchase
public decimal Price get;set;
public string Description get;set;
...
var purchases = new List<Purchase>() new Purchase() Price = 150, Description = "Flute" , new Purchase() Price = 4711, Description = "Bike" ;
Expression<Func<IEnumerable<Purchase>>> queryExp = () => from p in purchases
where p.Price > 100 && p.Description != "Bike"
select p;
ExpressionSerializer serializer = new ExpressionSerializer();
XElement queryXml = serializer.Serialize(queryExp);
然后我遇到了问题,但也许你可以用你查询的相当大的表达式树做点什么?你可以找到它here。
【讨论】:
以上是关于如何以编程方式将 LINQ 查询转换为正确描述 linq 表达式的可读英文文本?的主要内容,如果未能解决你的问题,请参考以下文章