繁体   English   中英

LINQ区分大小写

[英]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));

阅读我对此的回复:

String.Equals()无法正常工作

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

啊......如果你必须转换成相同的情况进行比较,ToUpper比ToLower更好。 不要问我为什么。 但是你可以在这里阅读: LINQ-to-SQL中的不区分大小写的字符串比较

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM