如何以编程方式将LINQ查询转换为正确描述linq表达式的可读英文文本?

时间:2010-06-08 16:27:38

标签: linq c#-3.0 predicatebuilder

我正在开发一个项目,该项目使用Albahari的PredicateBuilder库http://www.albahari.com/nutshell/在运行时动态创建linq表达式。我想找到一种方法来翻译这个动态创建的类型为Expression< Func< T,bool>>的linq谓词。在运行时转换成可读的英语语句。

我将以静态创建的linq语句为例:

购买中的p 选择p
其中p.Price> 100&& p.Description!=“自行车”。

对于这个linq语句,我想在运行时动态生成一个英文描述:

“您正在搜索价格大于100且描述不是自行车的购买”。

是否存在已实现此目标的库,请记住我使用PredicateBuilder动态生成where谓词。如果没有解决方案,您会如何构建解决方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

这引起了我的注意,所以我downloaded ExpressionSerializationTypeResolver.csExpressionSerializer.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