Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ To实体包含区分大小写的搜索_C#_Asp.net_Linq_Linq To Entities - Fatal编程技术网

C# LINQ To实体包含区分大小写的搜索

C# LINQ To实体包含区分大小写的搜索,c#,asp.net,linq,linq-to-entities,C#,Asp.net,Linq,Linq To Entities,我试图在linq to实体中这样查询我的结果集 var categoriesList = _catRepo.GetAllCategories(); filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for")); 但是,我没有得到任何结果,因为数据库中的CategoryName是For(大写)。我还检查了sql server排序规则,它设置为\u CI\u AS。我不知道如何使用contai

我试图在linq to实体中这样查询我的结果集

var categoriesList = _catRepo.GetAllCategories();


 filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for"));
但是,我没有得到任何结果,因为数据库中的
CategoryName
For(大写)
。我还检查了sql server排序规则,它设置为\u CI\u AS。我不知道如何使用contains来过滤不区分大小写的字符串? 我想基本上如果有人喜欢

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

结果应该是一样的

试试这个

filteredCategories = categoriesList.Where(c=>
 c.CategoryName.IndexOf("for", StringComparison.OrdinalIgnoreCase) >= 0)
包含如下所示的方法工作

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

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

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


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

这是否回答了问题?这对我来说不起作用,我想这通常与你说的排序规则有关。您确定
categoriesList
是一个DB查询,而不是一个已经在内存中查询过的列表(在这种情况下,您的表达式将不会转换为sql)。此外,如果您在该点跟踪db查询,将生成什么SQL?什么类型是
filteredCategories
?你能显示变量声明吗?对,这和数据库无关。您正在从数据库中取回所有实体,并希望对它们进行内存筛选。Contains将调用IndexOfanyways@Shymep是的,我知道,我只是提供了一个完整性:)这没有通过土耳其测试这将不会工作,如果直接在EF对象上工作。无法转换
IndexOf()
不适用于实体框架5。LINQ to Entities无法识别方法“Int32 IndexOf(System.String,System.StringComparison)”方法,并且无法将此方法转换为存储表达式
public bool Contains(string value)
{
   return this.IndexOf(value, StringComparison.Ordinal) >= 0;
}
filteredCategories = categoriesList.Where(c=> c.CategoryName.ToLower().Contains("for"));