[英]LINQ case sensitive
如何根据情况使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”并且我正在寻找“测试”或“测试”或类似时,它不起作用。 我如何才能使它在文本中找到文本或字符串的一部分? 谢谢
LINQ没有区分大小写的概念,它只关心布尔值。 因此,如果您想忽略大小写,您应该执行以下操作:
query = query.Where(x => (x.Name.ToLower().Contains(Name.ToLower())));
您可能希望将CultureInfo
传递给ToLower()(或使用ToLowerInvariant()
),并且您可能希望缓存Name.ToLower()
的结果,以便不必执行该操作的次数很多次,但这应该让你开始。
query = query.Where(x => string.Equals(x.Name, Name, StringComparison.CurrentCultureIgnoreCase));
阅读我对此的回复:
这不是你想要的回复,可能是:-)
啊......如果你必须转换成相同的情况进行比较,ToUpper比ToLower更好。 不要问我为什么。 但是你可以在这里阅读: LINQ-to-SQL中的不区分大小写的字符串比较
Queryable.Contains
有一个带有IEqualityComparer<T>
用于比较的重载。 见msdn 。 如果你提供一个不区分大小写的比较器,这应该可行 - 我很确定框架中已有一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.