C# 动态Linq结合EntityFramework给出错误
我们使用实体框架,并且需要在对象上进行一些运行时构建查询。从头开始构建表达式树似乎需要很多工作,因此我们希望使用“System.Linq.Dynamic” 通过对样本的研究,我得出了以下结论:C# 动态Linq结合EntityFramework给出错误,c#,linq,entity-framework,linq-to-entities,dynamic-linq,C#,Linq,Entity Framework,Linq To Entities,Dynamic Linq,我们使用实体框架,并且需要在对象上进行一些运行时构建查询。从头开始构建表达式树似乎需要很多工作,因此我们希望使用“System.Linq.Dynamic” 通过对样本的研究,我得出了以下结论: dbModel.As.Where(“AStuff.Contains(@0)或AStuff.Contains(@1)”、“ac”、“bc”) 但是如果我尝试像这样单独构建表达式: Expression<Func<A, bool>> predicateA = D
dbModel.As.Where(“AStuff.Contains(@0)或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);
表达式谓词a=
DynamicExpression.ParseLambda(
“AStuff.Contains(@0)”,
“ac”
);
表达式谓词B=
DynamicExpression.ParseLambda(
“AStuff.Contains(@0)”,
“卑诗省”
);
其中(“@0(it)或@1(it)”,谓词EA,谓词EB);
它会爆炸,但有一个例外:
NotSupportedException>>LINQ to实体中不支持LINQ表达式节点类型“Invoke”
可以用第一种形式构建整个查询,但在我们的场景中,后者更有用。有什么办法可以让它发挥作用吗 只需使用连接(或/和)多个谓词。这里的目标是什么?您认为表达式树比SQL更简单还是更易于维护?@Andomar:以模块化方式构建动态linq。不,在这些情况下,动态SQL更容易构建,但出于许多其他原因,我们使用EF和Linq。所以我想在我的解决方案中坚持这个Linq EF“味道”。我认为这里缺少Linq:动态Linq应该不比动态sql难。谢谢,但让我担心的是,我离“将此字符串解析为Linq”的解决方案越来越远了,在sql时代,这是很容易做到的。。。我希望MS将来会在这方面做一些工作