Подтвердить что ты не робот

EF Query с использованием .Contains() и .ToLowerInvariant() Результаты не совпадают, если совпадение найдено в конце строки

Можно ли вступить в запрос linq? У меня есть запрос linq для сущности framework 4 в нем простейшая форма:

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

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

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

  • Test001
  • Test002
  • Test003
  • Test004

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

Update

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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