Динамический LINQ-SQL-запрос, который запрашивает на основе нескольких ключевых слов - PullRequest
3 голосов
/ 04 января 2011

Я собирал простой маленький поиск.

IEnumerable<Member> searchResults = (from m in members
                                     where m.ScreenName.ToUpper().Contains(upperKeyword)
                                     select m).AsEnumerable();

Тогда я понял, что если пользователь наберет "keyword1 keyword2", этот маленький запрос всегда будет искать именно эту строку. Итак, я решил, что мне следует разделить ключевые слова

string[] keywords = upperKeyword.split(' ');

а потом я столкнулся с проблемой. Я не могу этого сделать:

IEnumerable<Member> searchResults = (from m in members
                                     where m.ScreenName.ToUpper().Contains(keywords) // array of string
                                     select m).AsEnumerable();

потому что .Contains() не принимает массив. Как я мог сделать это?

Ответы [ 3 ]

2 голосов
/ 04 января 2011

Попробуйте это (не проверено):

IEnumerable<Member> searchResults = members.ToList().Where(m => keywords.Any(k => m.Summary.Contains(k)))

Редактировать

Добавлен .ToList (), так как я не думаю, что LINQ сможет преобразоватьвыше в SQL, поэтому мы должны выполнить это в памяти.

1 голос
/ 04 января 2011

Для Точные Совпадения:

Попробуйте обратное тому, что у вас есть: where keywords.Contains(m.ScreenName)

Для справки: Создание запросов IN с помощью LINQ-to-SQL

Для Частичное Совпадения:

string[] keywords = new[]{ ... };
var results = db.members.Where(m => keywords.Any(sn => m.ScreenName.Contains(sn)));

Здесь нет ошибки компиляции, но у меня нет данных для проверки.

0 голосов
/ 04 января 2011

Я думаю, вам нужно преобразовать массив в список.Я только что вышел из офиса, но думаю, что это должно сработать.

IEnumerable<Member> searchResults = (from m in members
                                     where keywords.ToList().Contains(m.ScreenName.ToUpper()) // array of string
                                     select m).AsEnumerable();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...