LINQ to Entities包含区分大小写的搜索

时间:2013-03-12 13:44:21

标签: c# asp.net linq linq-to-entities

我正在尝试在linq中查询我的结果集到实体;

var categoriesList = _catRepo.GetAllCategories();


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

但是,由于数据库中的CategoryNameFor(Upper Case),我得不到任何结果。我还检查了sql server collat​​ion,并将其设置为 _CI_AS 。我不知道如何使用contains来过滤不区分大小写的字符串? 如果有人打字,我基本上想要;

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

OR

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

结果应该是相同的

2 个答案:

答案 0 :(得分:18)

试试这个

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

包含方法的工作方式如下所示

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

答案 1 :(得分:7)

之前的IndexOf答案应该有效。因为您正在从数据库加载所有实体,然后在其上执行内存(linq到对象)过滤器,所以您根本没有在数据库上执行任何操作。

这也应该有效(来自我引用的帖子)

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

撇开,如果您有很多类别,那么您可能希望在数据库中过滤它们,而不是从数据库中获取所有内容,然后在内存中过滤它们。