Linq中不区分大小写的“包含”

我有一个mvc项目,我使用linq。 在我的数据库中有一些记录,例如“Someth ing”,“SOmeTH ing”,“someTh ing”,“SOMETH ING”,“someTH ING”

我想做这个:

SELECT * FROM dbo.doc_dt_records WHERE name LIKE '%' + @records.Name + '%' 

但是,如果我运行此代码,list.Count将返回0.我该怎么办?

  records.Name = "someth ing"; //for example var rec = db.Records.ToList(); var lists = rec.Where(p => p.Name.Contains(records.Name)).ToList(); if (lists.Count > 0) { // do sthng } 

谢谢你的帮助……

简单的方法是使用ToLower()方法

 var lists = rec.Where(p => p.Name.ToLower().Contains(records.Name.ToLower())).ToList(); 

一个更好的解决方案(基于这篇文章: 不区分大小写’包含(字符串)’ )

  var lists = rec.Where(p => CultureInfo.CurrentCulture.CompareInfo.IndexOf (p.Name, records.Name, CompareOptions.IgnoreCase) >= 0).ToList(); 

这完全不是LINQ问题。

生成的SQL的大小写敏感度取决于与表相关的排序规则。 在您的情况下,哪些可能不区分大小写。

您将从您发出的任何SQL获得相同的结果。

使用IndexOfStringComparison.OrdinalIgnoreCase

 p.Name.IndexOf(records.Name, StringComparison.OrdinalIgnoreCase) >= 0; 

您可以创建这样的扩展函数:

 public static bool Contains(this string src, string toCheck, StringComparison comp) { return src.IndexOf(toCheck, comp) >= 0; } 

试试这个

 var lists = rec.Where(p => String.Equals(p.Name,records.Name,StringComparison.OrdinalIgnoreCase)).ToList(); 

请参考此处的文档