• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.netLinq和泛型,IEnumerable和IQueryable之间的区别,Lambda表达式,LinqtoSql停止 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

搞出来了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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap