2015-03-28 8 views
2

Я хочу, чтобы отфильтровать результаты в соответствии со списком строк, что-то вроде этого:Entity Framework Фильтрация с Списком строки

List<string> filters = {"a", "b", "c", "d"}; 
var results = (from R in db.Entries 
       where R.word.StartsWith(filters[0]) 
       ||R.word.StartsWith(filters[1]) 
       ||R.word.StartsWith(filters[2]) 
       ||... 

Я не знаю длину моего списка фильтров, так как Query динамически в LINQ?

Заранее спасибо.

+0

Является ли в списке фильтров единственными буквами? –

+0

yup, они - одиночные буквы. –

ответ

4

Это работает немного иначе в Linq, вроде наоборот

Используйте .Contains()

Что-то вроде этого:

from r in db.entries 
where filters.contains (r.word.substring(0,1)) 
+0

это отлично работает !, но мне интересно, вызывает ли подстрока (0,1) для каждого слова в базе данных много времени? Я думаю, что у меня будет проблема с производительностью (таблица записей содержит более 100 тыс. Слов) –

+0

@Aboud Попробуйте и посмотрите, есть ли у вас проблема с производительностью. –

+0

Кажется, что работа довольно быстро, спасибо –

5

Вы должны быть в состоянии сделать это следующим образом:

var results = db.Entries 
    .Where(r => filters.Any(f => r.word.StartsWith(f))); 

метод расширения Any это способ «сбросить» СНА in of ORs || применяется к списку в один звонок.

+0

Вы также можете заменить Any на All. Все ведут себя как OR и все больше похожи на AND. – Philippe

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