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. iOS8新特性之交互式通知

    目前分为四个推送:用户推送,本地推送,远程推送,地理位置推送. if (IS_IOS8) { //1.创建消息上面要添加的动作(按钮的形式显示出来) UIMutableUserNotification ...

  2. POJ 3134 Power Calculus ID-DFS +剪枝

    题意:给你个数n 让你求从x出发用乘除法最少多少步算出x^n. 思路: 一看数据范围 n<=1000 好了,,暴搜.. 但是 一开始写的辣鸡暴搜 样例只能过一半.. 大数据跑了10分钟才跑出来. ...

  3. 将查询到的数据导出到Excel终结版

    吐槽 最近新项目需要用到导出数据到Excel,试了试之前写的一篇博文,但是感觉那个不太好,主要原因是没能实现样式控制,今天我们就来介绍一种新的导出Excel方法,而且这种方法很轻量级,它利用xml生成 ...

  4. 【转自网络】JS实现保存当前网页HTML到本地

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. SignalR——聊天室的实现

    秒懂——SignalR ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连 ...

  6. 『转』Writing Well

    这是前辈Julie Zhuo的最新关于写作的文章,昨天写下-进行总结和阅读思考 这是一篇关于提笔写作的文章,首发在The looking glass...前辈每周都会回答一个读者的问题耶--This ...

  7. LA 3635 Pie

    题意:给出n个圆,分给n+1个人,求每个人最多能够得到多大面积的圆 二分每个人得到的圆的面积 #include<iostream> #include<cstdio> #incl ...

  8. Module build failed: Module failed because of a eslint warning

    eslint 设置 warning 级别,在 开发编译失败的原因,报错如下: F:\vue-mobile-skeleton>npm run dev > byhealth@1.0.0 dev ...

  9. HDU 2669 Romantic( 拓欧水 )

    链接:传送门 题意:求解方程 X * a + Y * b = 1 的一组最小非负 X 的解,如果无解输出 "sorry" 思路:裸 exgcd /***************** ...

  10. BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)

    明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...