zoukankan      html  css  js  c++  java
  • asp.net 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

  • 相关阅读:
    [Python]解决ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out
    Objective C XPC 初步学习<一>
    Vue的渣渣成长之路 第一章 登陆界面(vue+element+axios)以下文章感谢璋,威的同事给了我很大的帮助
    vue详情 恢复 删除
    vue添加
    vue显示详情加入回收站
    linq修改单条数据
    linq详情
    linq显示
    8.11模拟总结
  • 原文地址:https://www.cnblogs.com/iceicebaby/p/2406411.html
Copyright © 2011-2022 走看看