EF-запрос с использованием .Contains () и .ToLowerInvariant () Результатов не найдено, если совпадение найдено в конце строки - PullRequest
13 голосов
/ 28 декабря 2010

Можно ли войти в запрос linq? У меня есть запрос linq to Entity Framework 4 в простейшей форме:

List = List.Where(f => f.Value.ToString().ToLowerInvariant().Contains(filter.ToLowerInvariant()));

Это запрос к Entity Framework DbContext, и я не могу понять, почему он работает для чего-то вроде:

Поиск по списку 001 не дал результатов по сравнению со следующим списком

  1. Test001
  2. Test002
  3. Test003
  4. Test004

Однако любой другой поиск дает результаты (например, t00 или Test)

Обновление

По сути, я ищу, почему запрос, подобный приведенному выше, не будет возвращать результат, когда я использую содержимое, и значение соответствует концу строки против середины или начала. Это действительно сбивает с толку.

ОК, похоже, это как-то связано с ToLowerInvariant() - когда я удалил этот метод, он работал просто отлично.

Ответы [ 5 ]

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

Похоже, что ToLowerInvariant() выдает ошибку. ToLower() работает просто отлично.

3 голосов
/ 28 декабря 2010

попробуйте поработать с linqpad

0 голосов
/ 28 декабря 2010

Почему бы вам не сделать выборку для этого ToLowerInvariant (), чтобы увидеть, что он возвращает.

0 голосов
/ 28 декабря 2010

Этот запрос выполняется для базы данных (LINQ to EF) или для объектов, уже находящихся в памяти (LINQ для объектов).Я предполагаю, что это LINQ к объектам на основе комментария, который вы сделали для другого ответа, и в этом случае вы должны иметь возможность установить точку останова в лямбда-выражении.

0 голосов
/ 28 декабря 2010

Как предположил Дани, LinqPad - отличный инструмент для этого. И, хотя это не позволит вам «входить» в запросы Linq, вы можете использовать расширенный метод, предложенный в LinqPad, с именем Dump (), который покажет вам значение объектов IEnumerable или IQueryable по мере прохождения запроса. Это чрезвычайно полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...