Linq +Contains+ Case Insensitive 检索查询不区分大小写方法

来源:互联网 发布:ubuntu镜像文件安装 编辑:程序博客网 时间:2024/06/09 23:50

通常我们在查询中会只输入关键词来检索,有时候字母会有大小写区分,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

0 0
原创粉丝点击