我正在尝试构建一个表达式树(still)但是要进一步!我需要创建一个BinaryExpression
来执行成员和项目集合之间的“In”比较。因此,如果成员包含在项目中,则表达式应返回true。
这显然不存在:
Expression.MakeBinary(ExpressionType.In, memberExpression, constantExpression);
constantExpression
是ConstantExpression
类型IEnumerable<T>
,而memberExpression
是类型MemberExpression
的{{1}}。
我如何创建这样的表达式?
答案 0 :(得分:3)
您通常使用“Contains” - 这就是您通常编写LINQ查询的方法,该查询将映射到SQL中的“IN”:
var query = from user in db.Users
where specialUsers.Contains(user.Name)
select user.Id;
答案 1 :(得分:2)
只是想补充一下我最终如何使用它:
var callExpression = Expression.Call(typeof(Enumerable), "Contains", new Type[] {memberExpression.Type}, constantExpression, memberExpression);
编译和调用callExpression
会产生memberExpression
是否在constantExpression
集合中。