使用.Contains()和.ToLowerInvariant()的EF查询在字符串末尾找到匹配时没有匹配

时间:2010-12-27 21:27:55

标签: c# linq entity-framework-4

是否可以进入linq查询?我有一个linq to entity framework 4查询,它是最简单的形式:

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

这是针对实体框架DbContext的查询,我很难理解为什么它适用于以下内容:

搜索001的列表不会产生针对以下列表的结果

  1. Test001
  2. Test002
  3. Test003
  4. Test004
  5. 但是,任何其他搜索都会产生结果(例如t00Test

    更新

    基本上我正在寻找为什么当我使用contains时,如上所述的查询不会返回结果,并且该值匹配字符串的结尾vs中间或开头。这真的令人困惑。

    好的,它似乎与ToLowerInvariant()有关 - 当我删除该方法时,它可以正常工作。

5 个答案:

答案 0 :(得分:21)

ToLowerInvariant()似乎产生错误。 ToLower()工作得很好。

答案 1 :(得分:3)

尝试使用linqpad

答案 2 :(得分:0)

正如Dani所说,LinqPad是一个很好的工具。而且,即使它不允许您“进入”Linq查询,您也可以使用LinqPad中提供的名为Dump()的扩展方法,它将在您查询过程中向您显示IEnumerable或IQueryable对象的值。它非常有用。

答案 3 :(得分:0)

此查询是针对数据库(LINQ to EF)还是针对已存在于内存中的对象(LINQ to objects)运行的。我猜测它是基于你在另一个答案上做出的评论的对象的LINQ,在这种情况下你应该能够在lambda表达式中设置一个断点。

答案 4 :(得分:0)

为什么不对ToLowerInvariant()进行选择以查看它返回的内容。