Создать Expression‹Func› в цикле

Мне нужно создать выражение, чтобы оно выглядело так:

 Expression<Func<MyDataSet, bool>> searchfilter = null;

 string[] strsearchvalues = Searchvalues.Split(',');

 searchfilter = p => p.searchcolumn.contains(strsearchvalues[0]) && p.searchcolumn.contains(strsearchvalues[1]) && ....

Я пробовал этот, но он не работает:

Expression<Func<MyDataSet, bool>> columnfilter = null;

foreach(var s in strsearchvalues)
{
   columnfilter =  p => p.searchcolumn.contains(s);
  searchfilter = columnfilter.And(columnfilter);
}

Если значением поиска является «боб Смит», я хочу, чтобы результат возвращал столбец, содержащий как боб, так и кузнец, например «боби-кузнец» или «кузнец-боби». С помощью приведенного выше кода он возвращает «боби что-то» или «кузнец что-то». '.

Как я могу создать выражение с циклом, чтобы это сделать?

Спасибо!


person user1015413    schedule 06.11.2012    source источник


Ответы (1)


Попробуйте сделать так:

Expression<Func<MyDataSet, bool>> columnfilter = null;

foreach(var s in strsearchvalues)
{
   columnfilter = columnfilter == null ? p => p.searchcolumn.contains(s) : columnfilter.And(p => p.searchcolumn.contains(s)) ;
}
searchfilter  = columnfilter;

Надеюсь, это может быть полезно для вас...

person Raúl Otaño    schedule 06.11.2012
comment
Да, это очень полезно! Я сделал небольшое изменение, и он отлично работает - person user1015413; 06.11.2012
comment
Вот код: Expression‹Func‹MyDataSet, bool›› columnfilter = null; for(int i=0; i‹strsearchvalues.lenght; i++) { string s = strsearchvalues[i]; фильтр столбца = фильтр столбца == ноль? p => p.searchcolumn.contains(s) : columnfilter.And(p =› p.searchcolumn.contains(s)) ; } фильтр поиска = фильтр столбца; по некоторым причинам foreach(var s in strsearchvalues) не работает. В очередной раз благодарим за помощь! - person user1015413; 06.11.2012