通常我们在查询中会只输入关键词来检索,有时候字母会有大小写区分,SQL里面like 是不区分大小写检索的,但是LINQ中会、解决方法如下:
1: 全部转换为大写或者小写进行检索 如:
string name = "Hello";
var employees = context.employees.Where(emp => emp.Name.ToLower().Contains(name.ToLower()));
2:利用Contains 里面的 StringComparer.OrdinalIgnoreCase 来判断
StringComparer.OrdinalIgnoreCase的解释:https://msdn.microsoft.com/zh-cn/library/5hc8kytd(v=vs.110).aspx
List<string> list = new List<string>() { "a", "b", "c", "d", "e" };
string value = "A";
if (list.Contains(value, StringComparer.OrdinalIgnoreCase))
Console.WriteLine(value + "在列表中!");
else
Console.WriteLine(value + " 不在列表中!");
3:扩展一个方法利用StringComparison 枚举 来进行判断比较
StringComparison 枚举的解释:https://msdn.microsoft.com/zh-cn/library/system.stringcomparison(v=vs.110).aspx public static bool Contains(this string src, string toCheck, StringComparison comp)
{
return src.IndexOf(toCheck, comp) >= 0;
}
4:利用indexof+CompareOptions.IgnoreCase 进行不区分大小写比较后 大于等于0来判断
getStockData = getStockData.Where(p => CultureInfo.CurrentCulture.CompareInfo.IndexOf(p.Descr_C, strSkuContent, CompareOptions.IgnoreCase) >= 0).ToList();
5:利用indexof+StringComparison.OrdinalIgnoreCase进行不区分大小写比较后 大于等于0来判断
getStockData = (from p in getStockData where p.Descr_C.IndexOf(strSkuContent, StringComparison.OrdinalIgnoreCase) >= 0 select p).ToList<SearchExportStock>();
以上5种方法总有一种适合你的。
其他资料参考:
http://stackoverflow.com/questions/15362926/linq-to-entities-contains-case-in-sensitive-searching
stackoverflow.com/questions/27107132/case-insensitive-contains-in-linq