“In”操作的表达式树二进制表达式

时间:2010-03-23 16:22:31

标签: c# .net linq expression-trees

我正在尝试构建一个表达式树(still)但是要进一步!我需要创建一个BinaryExpression来执行成员和项目集合之间的“In”比较。因此,如果成员包含在项目中,则表达式应返回true。

这显然不存在:

Expression.MakeBinary(ExpressionType.In, memberExpression, constantExpression);

constantExpressionConstantExpression类型IEnumerable<T>,而memberExpression是类型MemberExpression的{​​{1}}。

我如何创建这样的表达式?

2 个答案:

答案 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集合中。