1. Lambda表达式在C#3.0加入,它是一个匿名函数,可用于创建委托或者表达式树类型,运算符为=>,读作”goes to”,=>左侧是变量,右侧是表达式,变量类型可以自动推导
  2. Linq查询操作由三个不同操作组成:示例代码:
    • 获取数据源,数据源可以使Xml,SQL数据库,Ado.net数据集,.Net集合中的数据等
    • 创建查询,但并没有执行查询,只是用一个变量存储查询,查询表达式包含三个字句:执行查询:使用foreach语句循环访问查询变量时才会真正执行查询,使用Count,Max,Average,First也会立即执行查询,这些语句会隐式调用foreach
      • from:指定数据源
      • where:指定filter
      • select:指定返回数据
  3. [TestClass]
    public class XmlLinqTest
    {
    private static XElement doc; [ClassInitialize]
    public static void Initialize(TestContext context)
    {
    doc = XElement.Load("Books.xml");
    } [TestMethod]
    public void QueryBook_Id_ReturnBook()
    { IEnumerable<XElement> books=from el in doc.Elements()
    where el.Attribute("id").Value.Equals("1")
    select el;
    XElement book = books.First();
    Assert.AreEqual(book.Attribute("id").Value, "1");
    Assert.AreEqual(book.Attribute("name").Value,"Linq");
    Assert.AreEqual(book.Attribute("author").Value,"Tom"); }
    }
     
    <?xml version="1.0" encoding="utf-8" ?>
    <Books>
    <Book id="1" name="Linq" author="Tom" />
    <Book id="2" name="Lambda" author="Jerry" />
    </Books>

  4. 查询关键字:查询语法在编译时被转换为方法调用,这些方法被称为standard query operators,包括Where,Select,GroupBy,Join,Max,Average等(都是扩展方法),可以直接调用这些方法替代查询语法
    • orderby:对返回的数据进行排序

    • group:按指定的键对结果进行分组,如果要对分组的结果进行操作可以使用into创建一个可以使用的查询符
    • 示例代码:
      // custQuery 的类型是IEnumerable<IGrouping<string, Customer>>
      // IGrouping是group.. by语句的返回类型
      var custQuery =
      from cust in customers
      group cust by cust.City into custGroup
      where custGroup.Count() > 2
      orderby custGroup.Key
      select custGroup;
    • join:联接,join字句接受两个数据源作为输入,只能执行等联接,也就是只能基于两个键之间的相等关系进行匹配,分为如下几种:
      • inner join:

      • group join:含有into字句,将会产生一个分组序列,该序列将左侧数据源中的元素与右侧数据源中的一个或多个元素相关联,如果右侧没有与左侧元素匹配的元素,则会产生一个空的集合
      • left outer join:在group join中使用DefaultEmpty方法,用于指定没有匹配时,左侧元素对应的元素,这样左侧数据源中的每个元素都会有对应的集合
      • 示例代码:
        <?xml version="1.0" encoding="utf-8" ?>
        <Authors>
        <Author id="1" name="Tom" />
        <Author id="2" name="Jerry"/>
        <Author id="3" name="Jack"/>
        </Authors> <?xml version="1.0" encoding="utf-8" ?>
        <Books>
        <Book id="1" name="Linq" authorId="1" />
        <Book id="2" name="Lambda" authorId="2" />
        <Book id="3" name="C#" authorId="1" />
        </Books>
         
        //BooksGroup是Books xml中满足条件的element的集合
        var group = from author in authors.Elements()
        join book in books.Elements() on author.Attribute("id").Value
        equals book.Attribute("authorId").Value into BooksGroup
        where author.Attribute("id").Value.Equals("1")
        select new { Author = author.Attribute("name").Value, authorBooks = BooksGroup };
    • select:生成查询结果
    • let:使用新的变量存储子表达式的结果,可供后面语句继续使用
  5. int[] numbers = { 5, 10, 8, 3, 6, 12};
    
            //Query syntax:
    IEnumerable<int> numQuery1 =
    from num in numbers
    where num % 2 == 0
    orderby num
    select num; //Method syntax:
    IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);
  6. https://blogs.msdn.microsoft.com/wesdyer/2008/01/10/the-marvels-of-monads/

C# Lambda && Linq的更多相关文章

  1. [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...

  2. 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)

    话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法  (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...

  3. [转][MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    本文转自:https://blog.csdn.net/dingxiaowei2013/article/details/29405687 继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下 ...

  4. 几种查询方法(lambda Linq Enumerable静态类方式)

    1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { ...

  5. 有关 Lambda && linq练习 有待整理

    1. 查询Student表中的所有记录的Sname.Ssex和Class列.(select sname,ssex,class from student) Students.Select(s=> ...

  6. ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高 ...

  7. Lambda&Linq

    var list = new List<Model> { , UserName = ", Email = "zhang3@yoy.com"}, , UserN ...

  8. Lambda表达式动态拼接(备忘)

    EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句 分类: C# Lambda/Linq Entity Framework 2013-05-24 06:58 ...

  9. [c#菜鸟]lambda表达式

    what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...

随机推荐

  1. 41.使用SAX读取XML

    main.cpp #include <QtGui> #include <iostream> #include "saxhandler.h" int main ...

  2. linux的chmod,chown命令 详解

    指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案 ...

  3. [转]数据库事务中的隔离级别和锁+spring Transactional注解

    数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...

  4. FrameLsyout

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_ ...

  5. [C#学习笔记之异步编程模式2]BeginInvoke和EndInvoke方法 (转载)

    为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应 ...

  6. Unity 动画资源与模型资源的区别

    动画资源: 模型资源: 对比: 模型文件多出来了 Materials + 贴图 + mesh文件,少了avatar文件 PS:动画资源,是指动画片段,即animation chip,它一般包含在模型资 ...

  7. Debian下签名无法验证

    又收集到的新方法 gpg --keyserver  subkeys.pgp.net --recv-keys AED4B06F473041FA  && apt-key add /root ...

  8. 怎样学CSS?

    什么是CSS? CSS(Cascading Style Sheet,层叠样式表)是由W3C(万维网联盟)的CSS工作组创建和维护的.它是一种不需要编译,可直接由浏览器执行的标记性语言,用于控制Web页 ...

  9. 面试题sql

    查询书的价格10到20 之前显示10to20 没有显示unknown CREATE TABLE book(price INT,NAME VARCHAR(20)) SELECT NAME AS '名字' ...

  10. JSP获取json格式的数据报错 Uncaught SyntaxError: Unexpected identifier

    后台json字符串是 {"id":"cmdb_ci.`fully_qualified_domain_name`","field":" ...