Dynamic Linq与EntityFramework结合使用会产生错误

时间:2014-01-13 10:08:54

标签: c# linq entity-framework linq-to-entities dynamic-linq

我们使用Entity Framework,我们需要对对象进行一些运行时构建查询。从头开始构建表达式树似乎很多工作,所以我们想使用“System.Linq.Dynamic”

通过样本我得到了这个工作:

dbModel.As.Where("AStuff.Contains(@0) OR AStuff.Contains(@1)","ac","bc")

但是,如果我尝试单独构建表达式:

    Expression<Func<A, bool>> predicateA =
        DynamicExpression.ParseLambda<A, bool>(                    
            "AStuff.Contains(@0)",
            "ac"
        );

    Expression<Func<A,bool>> predicateB =
        DynamicExpression.ParseLambda<A, bool>(
            "AStuff.Contains(@0)",
            "bc"
        );

    dbModel.As.Where("@0(it) OR @1(it)", predicateA, predicateB);

它爆炸,但有例外: NotSupportedException&gt;&gt; LINQ to Entities不支持LINQ表达式节点类型“Invoke”。

有可能以第一种形式构建整个查询,但后者在我们的场景中会更有用。有没有办法让这项工作?

1 个答案:

答案 0 :(得分:0)

只需使用Predicate Builder加入(或/和)多个谓词。