结合和/或与PredicateBuilder结合?

时间:2013-05-30 14:43:41

标签: c# .net-3.5 predicatebuilder

我有一个Ids的列表,我只希望在第一个ANDOR后续的counter。在过去,我保留了一个counter变量,当And为1时,我执行了OR,但之后我做了foreach(string id in Ids) { predicate.And(x=> id.Contains(x.id)); //I want to do an And only on the first id. } ,但我很好奇如果有一个更简单的方法:

int counter = 1;
foreach (var Id in Ids)
{
     string i = Id;
     if (counter == 1)
     {
         predicate = predicate.And(x => i.Contains(x.id));
         counter++;
      }
      else
      {
           predicate = predicate.Or(x=>i.Contains(x.id));
          counter++;
      }
   }

这是我过去所做的,但有一种更简洁的方式:

{{1}}

1 个答案:

答案 0 :(得分:1)

这适用于PredicateBuilder的本地副本(没有可用的entityFramework或LinkToSql):

var firstID = ids.First();
predicate.And(x => firstID.Contains(x.id));

foreach (string id in ids.Skip(1))
{
    var localID = id;   //access to a modified closure otherwise
    predicate.Or(x => localID.Contains(x.id)); 
}