2013-06-03 4 views
1

Целью является создание формы поиска, которая может быть введена при поиске нескольких полей. Но ввод всех полей является необязательным. Что такое эквивалентный код в LINQ? Спасибо.Необязательные требования к предложению where в LINQ

string str = ""; 
if(a!="") 
    str += "f1 == a"; 
if(b!="") 
    str += " && f2 == b"; 
if(c!="") 
    str += " && f3 == c"; 

select f1, f2, f3 from p 
where str; 

ответ

1

Попробуйте

from x in p where (x.f1 == a || a == "") && (x.f2 == b || b == "") && (x.f3 == c || c == "") select new { f1 = x.f1, f2 = x.f2, f3 = x.f3 } 

или на каждом переменном поиск делает его игнорировали, когда пустую строку. Я предполагаю, что вы уже позаботились о нулях в a, b, c.

4

Вы можете застроить последовательно запроса таким же образом, что-то вроде этого:

var query = someData.Items; 

if (a != string.Empty) 
    query = query.Where(x => x.f1 == a); 

if (b != string.Empty) 
    query = query.Where(x => x.f2 == b); 

... и так далее. В итоге вы создали запрос только с соответствующими предикатами.

+0

+1 для фактического использования функций LINQ и предоставления ответа, который будет работать намного лучше, чем альтернатива тому, что драйвер SQL Server/LINQ попытается оптимизировать ненужные части (что обычно происходит, но не всегда) –

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