您的位置:首页 > 编程语言 > ASP

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

2012-03-19 17:24 986 查看
一:LINQ 查询基于泛型类型,在 .NET Framework 的 2.0 版中引入了泛型类型。 您无需深入了解泛型即可开始编写查询。 但是,您可能需要了解两个基本概念: 当您创建泛型集合类(如 List(Of T) )的实例时,您将“T”替换为列表将包含的对象的类型。 例如,字符串列表表示为 List<string>,Customer 对象列表表示为 List<Customer>。 泛型列表是强类型的,且提供了比将其元素存储为 Object 的集合更多的好处。 如果您尝试将 Customer 添加到 List<string>,则会在编译时出现一条错误。 泛型集合易于使用的原因是您不必执行运行时类型强制转换。

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 数据库映射出来







搞出来了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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐