LINQ区分大小写

时间:2011-02-24 12:16:30

标签: sql linq linq-to-entities

如何根据具体情况使LINQ区分大小写并且不区分大小写?

我正在使用sql server 2008和Entity Framework 4.0。

我更改了COLLATION以使SQL Server区分大小写。所以对于这样的场景:

 query = query.Where(x => x.Username == username);

效果很好。 但是,当按主题(或名称或类似)搜索时,我需要能够从db 忽略大小写中提取数据,如下所示:

query = query.Where(x => (x.Name.Contains(Name)));

当记录是“TestString”并且我正在寻找“测试”或“测试”或类似时,它不起作用。我如何才能使它在文本中找到文本或字符串的一部分? 感谢

4 个答案:

答案 0 :(得分:11)

LINQ没有区分大小写的概念,它只关心布尔值。因此,如果您想忽略大小写,您应该执行以下操作:

query = query.Where(x => (x.Name.ToLower().Contains(Name.ToLower())));

您可能希望将CultureInfo传递给ToLower()(或使用ToLowerInvariant()),您可能希望缓存Name.ToLower()的结果,以便不必执行该操作的次数可能很多,但这应该可以让您开始。

答案 1 :(得分:6)

query = query.Where(x => string.Equals(x.Name, Name, StringComparison.CurrentCultureIgnoreCase));

答案 2 :(得分:1)

请阅读我对此的回复:

String.Equals() not working as intended

这不是你想要的回复,可能是: - )

啊......如果你必须转换到相同的情况进行比较,ToUpper比ToLower更好。不要问我为什么。但你可以在这里阅读:Case insensitive string compare in LINQ-to-SQL

答案 3 :(得分:1)

Queryable.Contains有一个超载用IEqualityComparer<T>用于比较。见msdn。如果你提供一个不区分大小写的比较器,这应该可行 - 我很确定框架中已有一个。