2013-05-30 32 views
0

我有一個Ids的列表,我只想在第一個上執行AND,而在後面的上只執行一個AND和和OR。在過去,我一直一個counter變量,當counter爲1時,我做的And,但在那之後我做了一個OR,但我很好奇,如果有一個更簡單的方法:結合和/或與PredicateBuilder?

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

這適用於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)); 
} 
+0

與And給了我errror:'{「無法創建一個類型'閉合類型'的常量值。 「} ids是一個字符串[] – Xaisoft

+0

@xaisoft:哪一行給出這個錯誤?'And'或'Or' ? – Pondidum

+0

帶'AND'的行 – Xaisoft