首页 > 解决方案 > 如何使用多个二进制表达式条件和包含条件创建动态 LINQ 表达式

问题描述

我想为这种查询创建一个动态 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)

但这会返回 aMethodCallExpression并且我无法附加到我的List<BinaryExpression>

我想将contains表达式附加到的BinaryExpression原因是因为这就是我做&&LINQ 部分的方式

var aggregatedExpressions = binaryExpressions.Aggregate((x, y) => Expression.AndAlso(x, y));

如果我无法将 Contains 表达式附加到 Binary Expression 中,如何将 Contains 聚合MethodCallExpression到 myaggregatedExpressions中,以便以这种方式编写?

x.Name="Some_Name" && x.Age>60 && x.ChildIds.Contains("Some_Id")

标签: linqdynamicexpressionlinq-expressionsdynamic-linq

解决方案


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

aggregatedExpressions = Expression.AndAlso(aggregatedExpressions, methodCallExpression);

推荐阅读