2013-05-30 6 views
0

У меня есть список Ids, и я только хочу сделать 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

Тот, у кого есть И, дает мне ошибку: '{« Невозможно создать постоянное значение типа «Тип закрытия». В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid). "}'. Ids - это строка [] – Xaisoft

+0

@xaisoft: в какой строке это ошибка? '' И 'Or' ? – Pondidum

+0

Строка с 'AND' – Xaisoft

 Смежные вопросы

  • Нет связанных вопросов^_^