Linq和SQL中的in和Like

今天在某个功能需要用到Linq中类似SQL中的in查询,但是这东西好像没用过鸭~~~~~ 

 

 

话不多说,先百度一下下!!!为了能够更好的理解记忆,我们把SQL和LINQ进行一个对比 

 使用 in

SQL:

select * from CodeFirstDb.dbo.Orders where id in ('1','2'); 

 

   结果为:

 

LINQ:

 using (var db = new OrderContext("CodeFirstDb"))
            {
                //方法语法
                int[] ints = new int[] { 1, 2 };
               var result =  db.Orders.Where(p => ints.Contains(p.Id));
                foreach (var item in result)
                {
                    Console.WriteLine(item.Customer);
                }
                //标准查询语法
                 ints = new int[] { 4 };
                result = from s in db.Orders 
                         where ints.Contains(s.Id) 
                         select s;
                foreach (var item in result)
                {
                    Console.WriteLine(item.Customer);
                }
                
            }

结果为:

 

 

 

 

使用not in

SQL:

select * from CodeFirstDb.dbo.Orders where id not in ('1','2');

结果为:

 

 

 

Linq:

  using (var db = new OrderContext("CodeFirstDb"))
            {
                //方法语法
                int[] ints = new int[] { 1, 2 };
               var result =  db.Orders.Where(p => !(ints.Contains(p.Id)));
                foreach (var item in result)
                {
                    Console.WriteLine(item.Customer);
                }
                //标准查询语法
                 ints = new int[] { 1, 2 };
                result = from s in db.Orders 
                         where !(ints.Contains(s.Id)) 
                         select s;
                foreach (var item in result)
                {
                    Console.WriteLine(item.Customer);
                }
                
            }

结果为:

 

 

 

使用Like

Sql中:

SELECT   Id, Customer, OrderDate FROM      Orders WHERE   (Customer LIKE '%EFdemo%')

Linq中:

 IQueryable<Order> queryable = from p in ctx.Orders 
                                       where p.Customer.Contains("efdemo")
                                       select p;

                foreach (var item in queryable)
                {
                    Console.WriteLine(item.Customer +"*******"+item.OrderDate);
                }

如果是 ‘EFdemo%’这种形式     则使用  where p.Customer.StartsWith("efdemo")

如果是 ‘%EFdemo’这种形式     则使用  where p.Customer.EndsWith("efdemo")

 

精确到字符串对应位数字符的模糊查询

SQL:     SqlFunctions.PatIndex("_a__3%", des.PlateNum) > 0————————>sql server 的   like '_a__3%'

from des in db.ModelsVehicleRecognition where (SqlFunctions.PatIndex("_a__3%", des.PlateNum) > 0) select new { plateMun = des.PlateNum }

等同于

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum  like '_a__3%'

说明:'_a__3%' 中的下划线“_”表示一个字符,'_a__3%' 这个字符串查询意思就是第二个字符是a,第五个字符是3的字符串

       因为a和3之间有两个下划线“_”所以查询出的结果也要满足a和3之间有两个字符才行,

       也就是说两个精确字符之间隔了几个字符,在查询的时候就要写几个下划线“_”。

 

 

总结: 在Linq中使用IN的话,实现方式为contains() ,用in条件所组成的数组去判定每一条数据,如果是not in 的话 在判断条件上加上非!,

     在Linq中使用like ,实现方式为 startswith(),endswith(),contains()

 

posted @ 2021-06-08 10:03  就爱啃西瓜  阅读(792)  评论(0编辑  收藏  举报