【发布时间】:2021-11-04 15:01:31
【问题描述】:
我想为这种查询创建一个动态 LINQ 表达式
people.Where(x => x.Name="Some_Name" && x.Age>60 && x.ChildIds.Contains("Some_Id"));
我已经做的是填充我的List<BinaryExpression>。 List<BinaryExpression> 包含 x.Name="Some_Name" 和 x.Age>60。
我现在的问题是x.ChildIds.Contains("Some_Id")。我一直在寻找一种动态创建Contains 表达式的方法,这就是我得到的:
Expression.Call(memberExpression, "Contains", null, constantExpression)
但这会返回一个MethodCallExpression,我无法附加到我的List<BinaryExpression>
我想将contains 表达式附加到BinaryExpression 的原因是因为这就是我执行LINQ 的&& 部分的方式
var aggregatedExpressions = binaryExpressions.Aggregate((x, y) => Expression.AndAlso(x, y));
如果我无法将 Contains 表达式附加到二进制表达式中,我如何将 Contains MethodCallExpression 聚合到我的 aggregatedExpressions 中以便以这种方式编写?
x.Name="Some_Name" && x.Age>60 && x.ChildIds.Contains("Some_Id")
【问题讨论】:
-
您可以将
List<BinaryExpression>更改为List<Expression>,因为BinaryExpression只是可以聚合的布尔表达式的子集。
标签: linq dynamic expression linq-expressions dynamic-linq