LINQ大小写敏感

12

如何根据情况使LINQ区分大小写或不区分大小写?

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

我改变了COLLATION以使SQL Server区分大小写。这样对于以下情况:

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

它很好用。然而当按主题(或名称等)搜索时,我需要能够从数据库中提取数据,并且可以 忽略大小写

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

当记录为"TestString"且我在寻找"test"或"Test"等类似字符串时,这个方法不起作用。 我该如何使其能够查找文本或文本中的部分字符串?谢谢。


可能相关:https://dev59.com/gG865IYBdhLWcg3wYNjj - user
使用 ToUpper/Lower 解决方案或编写类似以下 SQL 查询语句:SELECT * FROM tblUser WHERE tblUser.userName = 'test' COLLATE Finnish_Swedish_CI_AS - Magnus
4个回答

19

LINQ没有大小写敏感的概念,它只关心布尔值的评估。因此,如果你想忽略大小写,应该这样做:

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

很有可能你会想要传递一个 CultureInfo 给 ToLower()(或使用 ToLowerInvariant()),并且你可能想要缓存 Name.ToLower() 的结果,以免需要执行那个操作过多次,但这应该足以让你入门了。


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

2

2
Queryable.Contains有一个重载方法,接受一个用于比较的IEqualityComparer<T>。请参阅msdn。如果您提供一个不区分大小写的比较器,它应该可以工作 - 我相信框架中已经有这样的比较器了。

我认为IEqualityComparer<T>仅在Linq to objects中受支持。 - Magnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接