2011-08-18 68 views
1

我有一个BinaryExpression的列表,我需要在单个“对象”中加入这个列表的元素。Linq - Expression.And加入N个元素BinayExpression

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.And,我需要做一个逻辑实施这个,但我不能。我试图在列表中创建一个循环,但是Expression.And需要两个表达式,并且在我的循环中我只有一个。 在此之后,我会从这个单一的 “对象” 做出Expression.Lamba,像这样:

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

回答

2

我想你想(使用LINQ):

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

如果你宁愿写一篇循环:

var singleExpression = lstBin.First(); 

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

谢谢,工作完美! – Gandarez

+0

实际上,您应该使用Expression.AndAlso而不是按位Expressopm.And,如下所述:http://blogs.microsoft.co.il/blogs/idof/archive/2009/08/26/expressiontype-and- vs-expressiontype-andalso.aspx – eluxen

+0

@eluxen:是;你是对的。不记得我是如何滑倒的。 – Ani