Ответ 1
Похоже, что ToLowerInvariant()
вызывает ошибку. ToLower()
работает просто отлично.
Можно ли вступить в запрос linq? У меня есть запрос linq для сущности framework 4 в нем простейшая форма:
List = List.Where(f => f.Value.ToString().ToLowerInvariant().Contains(filter.ToLowerInvariant()));
Это запрос к Entity Framework DbContext
, и мне трудно понять, почему он работает для чего-то вроде:
Поиск списка 001
не дает результатов в отношении следующего списка
Однако любой другой поиск дает результаты (такие как t00
или Test
)
В принципе, я ищу, почему такой запрос, как указано выше, не будет возвращать результат, когда я использую contains, а значение соответствует концу строки по сравнению с серединой или началом. Это действительно запутанно.
ОК, похоже, что-то связано с ToLowerInvariant()
- когда я удалил этот метод, он работает нормально.
Похоже, что ToLowerInvariant()
вызывает ошибку. ToLower()
работает просто отлично.
попробуйте работать с linqpad
Как предположил Дани, LinqPad - отличный инструмент для этого. И даже если это не позволит вам "входить" в запросы Linq, вы можете использовать расширенный метод, предложенный LinqPad с именем Dump(), который покажет вам значение объектов IEnumerable или IQueryable по мере продвижения по вашему запросу. Это чрезвычайно полезно.
Выполняется ли этот запрос для базы данных (LINQ to EF) или для объектов, уже находящихся в памяти (LINQ to objects). Я предполагаю, что это LINQ для объектов на основе комментария, сделанного вами на другом ответе, и в этом случае вы должны иметь возможность установить точку останова в выражении лямбда.
Почему бы вам не сделать выбор в этом ToLowerInvariant(), чтобы увидеть, что он возвращает.