我有一个Ids的列表,我只想在第一个列表上执行AND,在后续的列表中执行OR。在过去,我保留了一个counter变量,当counter为1时,我执行And,但在那之后我执行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++;
}
}发布于 2013-05-30 22:52:10
这适用于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));
}https://stackoverflow.com/questions/16839169
复制相似问题