Linq - Expression.И присоединить N элементов BinayExpression - PullRequest
1 голос
/ 18 августа 2011

У меня есть список BinaryExpression, и мне нужно объединить элементы этого списка в один «объект».

IList<BinaryExpression> lstBin = new List<BinaryExpression>();

Внутри моего списка есть следующее:

{(item.Field1 = 1)} //First Element
{(item.Field2 = 99)} //Second Element
//So on..

Мне нужно что-то вроде этого:

(item => item.Field1 == 1 && item.Field2 == 99 && item.Field3 == 45)

Я знаю, что у Linq есть Expression.A, и мне нужно создать логику для реализации этого, но я не смог.Я попытался сделать цикл внутри моего списка, но Expression.And необходимо два выражения, и внутри моего цикла у меня есть только один.После этого я сделаю Expression.Lamba из этого единственного «объекта», например:

Expression<Func<T, bool>> expr = Expression.Lambda<Func<T, bool>>(singleExpression, parameter);

1 Ответ

2 голосов
/ 18 августа 2011

Я думаю, что вы хотите (с LINQ):

var singleExpression = lstBin.Aggregate(Expression.AndAlso);

Если вы предпочитаете писать цикл:

var singleExpression = lstBin.First();

foreach (var expr in lstBin.Skip(1))
    singleExpression = Expression.AndAlso(singleExpression, expr);
...