【问题标题】:How to create dynamic LINQ Expression with multiple binary expression conditions and a contains condition如何使用多个二进制表达式条件和包含条件创建动态 LINQ 表达式
【发布时间】: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


【解决方案1】:

我现在关闭它。我已经弄清楚如何聚合MethodCallExpressions

aggregatedExpressions = Expression.AndAlso(aggregatedExpressions, methodCallExpression);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    相关资源
    最近更新 更多