13

我正在尝试在 linq to entity 中像这样查询我的结果集;

var categoriesList = _catRepo.GetAllCategories();


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

但是,我没有得到任何结果,因为CategoryNameFor(Upper Case)在数据库中。我还检查了 sql server 排序规则并将其设置为_CI_AS。我不知道如何使用 contains 过滤不区分大小写的字符串? 如果有人键入,我基本上想要;

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

或者

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

结果应该是一样的

4

2 回答 2

18

试试这个

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

Contains 方法的工作原理如下所示

public bool Contains(string value)
{
   return this.IndexOf(value, StringComparison.Ordinal) >= 0;
}
于 2013-03-12T13:49:58.480 回答
7

以前的IndexOf答案应该有效。因为您正在从数据库中加载所有实体,然后对其进行内存中(linq to objects)过滤,所以您根本没有在数据库上做任何事情。

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

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

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

于 2013-03-12T13:57:14.693 回答