什么是Linq,什么是Lambda表达式?他们的区别和共同点是什么?

一、什么是Linq,Lambda

整理自 https://www.cnblogs.com/dotnet261010/p/8278793.html
PS:下面臭长臭长的东西可以不看的,直接翻下去看代码更好理解
Linq:
1、面向对象与数据访问两个领域长期分裂,各自为政。

2、编程语言中的数据类型与数据库中的数据类型形成两套不同的体系,例如:

C#中字符串用string数据类型表示。

SQL中字符串用NVarchar/Varchar/Char数据类型表示。

3、SQL编码体验落后

没有智能感知效果。

没有严格意义上的强类型和类型检查。

4、SQL和XML都有各自的查询语言,而对象没有自己的查询语言。

上面描述的问题,都可以使用LINQ解决,那么究竟什么是LINQ呢?

1、LINQ(Language Integrated Query)即语言集成查询。

2、LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询。用于保存和检索来自不同数据源的数据,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。

3、LINQ总是使用对象,因此你可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据集以及任何其他可用的LINQ提供程序格式的数据。
4、Linq从另一方面来说也有效地防止了Sql注入哈哈

LINQ主要包含以下三部分:

1、LINQ to Objects 主要负责对象的查询。

2、LINQ to XML 主要负责XML的查询。

3、LINQ to ADO.NET 主要负责数据库的查询。

LINQ to SQL

LINQ to DataSet

LINQ to Entities
  
Lambda表达式:
1、简化了匿名委托的使用。
2、Lambda让我们的代码更加的简介与方便,可以方便的用Where()、Select()等扩展方法对集合进行筛选,组合

下面我们来举个栗子 :

在这里插入图片描述
1.两者 简单的语法

   static void Main(string[] args)
        {
            int[] scores = { 90, 71, 82, 93, 75, 81 };
            //查大于80分的成绩
            var result = from s in scores
                         where s > 80
                         select s;   //Linq写法
                         
            var result1 = scores.Where(s => s > 80);   //lambda表达式写法
        }
        
        Linq基本语法: from  s  in  数据源  
                  where  条件语句 
                  select  要查的结果
        s 是随便起的一个名字,代表这个数据源
        
        Lambda基本语法:
        所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。
        运算符将表达式分为两部分,左边指定输入参数
        右边是lambda的主体,一些筛选语句等等,可以简单的理解为sql里面的where条件

2.简单的排序

   static void Main(string[] args)
        {
            int[] scores = { 90, 71, 82, 93, 75, 81 };
            //查大于80分的成绩
            var result = from s in scores
                         where s > 80 
                         orderby s descending //倒序  正序为ascending
                         select s;
            var result1 = scores.OrderByDescending(s=>s).Where(s => s > 80);//倒序
            var result1 = scores.OrderBy(s=>s).Where(s => s > 80);//正序
        }

3.简单的函数计算

       int[] scores = { 90, 71, 82, 93, 75, 82 };
            //查大于80分的成绩和
            var result = (from s in scores
                         where s > 80 
                         select s).Sum();
            var result1 = scores.Where(s => s > 80).Sum();

4.分页查询

       var result= (from r in db.Product
                      where r.rpId > 10
                      orderby r.rpId descending
                      select r).Skip(10).Take(10); //取第11条到第20条数据    
       var result1 = db.Product.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).Skip(10).Take(10).ToList();
         
       //PS:忘了从哪看到的了,这个ToList在读表数据时候是要写的。另外lambda表达式跟EF很配。

5、包含,类似like ‘%%’

  var ss = from r in db.Product
                     where r.SortsText.Contains("来源")
                     select r;
  var ss1 = db.Product.Where(p => p.SortsText.Contains("来源")).ToList();

6、筛选字段中不相同的值。用于查询不重复的结果集

int[] scores = { 90, 71, 82, 93, 75, 90 };

            var result = (from s in scores
                         where s > 80
                         select s).Distinct(); 
            var result1 = scores.Distinct().Where(s => s > 80);

7、分组

var sums2 = from emp in empList
            group emp by new { emp.Age, emp.Sex } into g
            select new { Peo = g.Key, Count = g.Count() };
            
 var sums = empList
         .GroupBy(x => new { x.Age, x.Sex })
         .Select(group => new {
            Peo = group.Key, Count = group.Count()
         });
  

8、连接查询

  var ss = from p in db.Product
                     join s in db.ShoppingCart on p.Id equals s.pId
                     select r;
                     
  var ss1 = db.Product.Join(db.ShoppingCart , p => p.Id, r => r.pid, (p, r) => p).ToList();
            //3

猜你喜欢

转载自blog.csdn.net/qq_41885871/article/details/84024643