Двоичное выражение дерева выражений для операции «В» - PullRequest
0 голосов
/ 23 марта 2010

Я пытаюсь построить дерево выражений ( все еще ), но продолжаю! Мне нужно создать BinaryExpression, чтобы выполнить сравнение «В» между членом и набором элементов. Следовательно, выражение должно возвращать true, если элемент содержится в элементах.

Этого явно не существует:

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

constantExpression является ConstantExpression типа IEnumerable<T>, а memberExpression является MemberExpression типа T.

Как бы я создал такое выражение?

Ответы [ 2 ]

3 голосов
/ 23 марта 2010

Вместо этого вы обычно используете «Contains» - именно так вы обычно пишете запрос LINQ, который в SQL соответствует «IN»:

var query = from user in db.Users
            where specialUsers.Contains(user.Name)
            select user.Id;
2 голосов
/ 23 марта 2010

Просто хотел добавить, как я в итоге заставил это работать:

var callExpression = Expression.Call(typeof(Enumerable), "Contains", new Type[] {memberExpression.Type}, constantExpression, memberExpression);

Компиляция и вызов callExpression приведет к тому, находится ли memberExpression в коллекции constantExpression.

...