c# - Linq 中不区分大小写的 "contains"

标签 c# linq

我有一个 mvc 项目,我在其中使用了 linq。 在我的数据库中有一些记录,例如“Something”,“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();

更好的解决方案(基于这篇文章:Case insensitive 'Contains(string)')

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

关于c# - Linq 中不区分大小写的 "contains",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27107132/

相关文章:

c# - LINQ 查询 Bool+String 对列表。如何在没有 foreach 的情况下连接字符串?

c# - 创建时无法解析 IMvxMainThreadDispatcher 类型的参数调度程序的参数

c# - 使用 C# .Net Core 连接到远程 Jaegertracing

c# - Linq中的高级过滤

linq - NHibernate 3.x 在组合 LINQ 分页、多对多和子选择获取时删除子实体

C# - 搜索不同日期的 2 个 DateTime 对象之间的时间

c# - 命名空间与 WCF 的相似名称混淆

linq - 为什么我不能在 OData 中使用 LINQ 的 First/FirstOrDefault 方法?

c# - 将数据表转换为字典 C#

c# - LINQ:跳过并获取重复项