2013-08-09 2 views
1

У меня есть несколько comboboxes, которые передают значение запросу linq. Раньше я его сCombobox «Выбрать все» в запросе linq

if(combobox.text == "select all") 
     {combobox.text = "") 

обрабатывал А затем с помощью метода StartsWith (combobox.text), чтобы сделать сравнение, я знаю, что это неправильно. Поскольку «джим» вернется «Джимми». Как выбрать все, когда выбрано «выбрать все»?

+0

Может помочь http://stackoverflow.com/questions/934241/listbox-select-all-items – PiLHA

ответ

2

Лучше всего было бы условно добавить фильтр запроса:

var query = dataSource.foo.AsQueryable(); 
//you may or may not need AsQueryable() depending on what "foo" is 
//if it is not queryable, you may need AsEnumerable(), or simply nothing 

if (!combobox.Text.Equals("select all")) 
    query = query.Where(x => x.Equals(combobox.Text)); 

return query.ToList(); 

«проще» путь будет использовать логические or, но результирующий запрос является уродливее и может или не может быть переводимые в SQL (если это то, что вы используете):

var query = dataSource.foo 
    .Where(x => combobox.Text.Equals("select all") || x.Equals(combobox.Text)); 
+0

Вот что я думал, что это Грядут к, надеясь, что был более простой способ. – user2525463

+0

Я продемонстрировал «более простой» способ, используя or-expression, но это, вероятно, не лучший выбор, если вы не знаете, что оптимизатор удалит лишние сравнения. –

+0

Мысли об этом немного и придумали ленивый способ, должен работать 99.9999% времени StartsWith() && EndsWith() – user2525463

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