C# LINQ To实体包含区分大小写的搜索
我试图在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
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"));