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

  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2810851.html
Copyright © 2011-2022 走看看