Linq和泛型,IEnumerable和IQueryable之间的区别,Lambda表达式,Linq to Sql停止开发转为 Entity Framework

一:LINQ 查询基于泛型类型,在 .NET Framework 的 2.0 版中引入了泛型类型。 您无需深入了解泛型即可开始编写查询。 但是,您可能需要了解两个基本概念:

  1. 当您创建泛型集合类(如 List(Of T) )的实例时,您将“T”替换为列表将包含的对象的类型。 例如,字符串列表表示为 List<string>,Customer 对象列表表示为 List<Customer>。 泛型列表是强类型的,且提供了比将其元素存储为 Object 的集合更多的好处。 如果您尝试将 Customer 添加到 List<string>,则会在编译时出现一条错误。 泛型集合易于使用的原因是您不必执行运行时类型强制转换。

  2. IEnumerable(Of T) 是一个接口,通过该接口,可以使用 foreach 语句来枚举泛型集合类。 泛型集合类支持 IEnumerable(Of T) ,就像非泛型集合类(如 ArrayList)支持 IEnumerable

二:IEnumerable<T>和IQueryable<T>之间的区别

都是代表泛型的集合,但是 IEnumerable<T> 指的是 本地的可列举的集合。Linq 2 Object 例如

List<person> persons = new List<person> //这里就是 集合初始化 { new person{Age=10,Name="joey",sex="男"}, //对象初始化 new person {Age=20,Name="etam",sex="女"}, new person {Age=30,Name="eric",sex="男"}, new person{Age=10,Name="king",sex="男"} }; 

当我们不知道要查找什么类型的时候,可以使用 var

IEnumerable<person> p = from per in persons where per.Name[0] == 'e' select per; var p2= from per2 in persons where per2.Name[0]=='e' select per2; foreach (var a in p) { Response.Write(a.Age +" 名字是"+a.Name+"<br>"); } foreach (var a in p2) { Response.Write(a.Age +" 名字是"+a.Name+"<br>"); } 

而 IQueryable<T> 指的是  远程的查询  Linq 2 Sql

IEnumerable<T>  也即是 Linq 2 Object  将数据存放在内存中.

IQueryable<T>     也既是 Linq 2 Sql  则是把数据存放在远程的服务器中. 这个是延迟执行的

三:Lambda 在基于方法的 LINQ 查询中用作标准查询运算符方法(如 Where)的参数,注意看是参数

List<string> fruits = new List<string> { "apple", "passionfruit", "banana", "mango", "orange", "blueberry", "grape", "strawberry" }; IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6); foreach (string fruit in query) { Console.WriteLine(fruit); } /* This code produces the following output: apple mango grape */

“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。

所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。 该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。 Lambda 表达式 x => x * x 读作“x goes to x times x”。

Lambda表达式是对.NET2.0中匿名方法在语法形式上的进一步改进,仍然以代码说明:

var inString = list.FindAll(delegate(string s) { return s.Indexof("YJingLee") >= 0; });

使用Lambda表达式代码将更自然易懂。

var inString = list.FindAll(s => s.Indexof("YJingLee") >= 0);

可以看出,Lambda表达式格式为:(参数列表)=>表达式或语句块 

Linq to sql  好像停止开发了。如果要使用 Linq to Sql  还需要先弄一个  对象关系设计器(O/R 设计器),这样才可以把演示的 Northwnd 数据库映射出来

04BR~8C~`CBQ]7BLR(QS${H

3]$H_W7`1UDL0X$OKC}9939

搞出来了Linq之后,为了演示和体现一下Linq这个东西能干点啥,C#团队就做了一个东西叫作 Linq To SQL ,它是一个轻量级 ORM 工具。

再然后,这个东西就从 C# 团队移交给 ADO.NET 团队了。ADO.NET 决定要做一个更大的工具,就是 Entity Framework,就停止了Linq  To Sql 的继续开发,当然目前仍有很多人在用Linq to SQL。

但是linq还是很强大的,连一个数组都可以用linq来查。现在是在 Entity Framework 里面 使用 Linq

原文地址:https://www.cnblogs.com/zhangchenliang/p/2810851.html