Как можно сделать инвариант .Contains (myQuery) с Linq to Objects? - PullRequest
1 голос
/ 06 октября 2010

Я пытаюсь отфильтровать список объектов, используя linq. Когда я фильтрую по Contains(someSearchQuery), это как будто он чувствителен к регистру ... то есть я пропускаю некоторые результаты.


У меня есть IList<Foo>, который имеет ряд свойств, но один из них public string MyText { get; set; }

Теперь я пытаюсь вернуть IQueryable из Foo, где свойство MyText содержит search query - но в качестве оператора Sql это будет либо:

WHERE MyText LIKE '%searchQuery%' <- работает, но неэффективно </p>

или

WHERE CONTAINS(MyText, 'searchQuery') <- с использованием FTS. </p>

Я не уверен, как это сделать, потому что, когда я делаю следующий запрос, это похоже на регистр символов

var query = from q in myFooList.AsQueryable().Where(x => x.MyText.Contains(searchQuery));

Предложения

1 Ответ

8 голосов
/ 06 октября 2010

Вы спрашиваете о методе string.Contains, а не о LINQ.

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

var query = from q in myFooList
     .Where(x => x.MyText.IndexOf(searchQuery, StringComparison.OrdinalIgnoreCase) >= 0);

Обратите внимание, что поскольку вы используете LINQ-to-Objects, вам (предположительно) не нужно AsQueryable.

...