LINQ到实体包含区分大小写的搜索

本文关键字:大小写 搜索 包含区 实体 LINQ | 更新日期: 2023-09-27 18:03:25

我想查询我的结果集,像这样在linq实体;

var categoriesList = _catRepo.GetAllCategories();

 filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for"));

然而,我没有得到任何结果,因为CategoryNameFor(Upper Case)在数据库中。我还检查了sql server排序,它被设置为_CI_AS。我不知道如何使用包含过滤大小写不敏感的字符串?我想如果有人输入;

 filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for"));

filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("For"));

结果应该相同

LINQ到实体包含区分大小写的搜索

试试这个

filteredCategories = categoriesList.Where(c=>
 c.CategoryName.IndexOf("for", StringComparison.OrdinalIgnoreCase) >= 0)

包含如下所示的方法

public bool Contains(string value)
{
   return this.IndexOf(value, StringComparison.Ordinal) >= 0;
}

前面的IndexOf答案应该有效。因为您正在从数据库中加载所有实体,然后对其执行内存中(与对象的关联)筛选,所以您根本没有对数据库执行任何操作。

这也应该工作(从我引用的帖子)

filteredCategories = categoriesList.Where(c=> c.CategoryName.ToLower().Contains("for"));

顺便说一句,如果你有很多类别,那么你可能想要在数据库中过滤它们,而不是从数据库中取出所有类别,然后在内存中过滤它们。