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. Jenkins+Docker部署Maven聚合工程

    这几天,把公司的预发布环境,改成docker部署,遇到了一些坑,有jenkins里的部署脚本的问题,也有harbor仓库的问题,还有docker远程访问的问题,还有DooD....一堆坑 Jenkin ...

  2. C++中的pair,make_pair学习

    std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型.例如std::pair<int,float> 或者 std::pair<double,do ...

  3. Fragment间相互调用并传值

    public class MainFragment extends Fragment { private static final String ARG_DATE="com.example. ...

  4. MarkDown 语法备份

    标题 标题1 标题2 标题3 标题4 标题5 无序列表 飞雪连天射白鹿 书神侠倚碧鸳 有序列表 飞雪连天射白鹿 笑书神侠倚碧鸳 超链接 百度 图片 粗体和斜体 粗体 斜体 表格 左对齐标题 右对齐标题 ...

  5. 立即执行函数与Function

    js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 与new Function()区别? new Function() 还是有区别的,fn = ne ...

  6. POJ 1458 Common Subsequence 【最长公共子序列】

    解题思路:先注意到序列和串的区别,序列不需要连续,而串是需要连续的,先由样例abcfbc         abfcab画一个表格分析,用dp[i][j]储存当比较到s1[i],s2[j]时最长公共子序 ...

  7. ZBrush中绘制层是什么意思?

    我们经常使用笔刷雕刻模型,在使用笔刷为头部模型添加一些纹理效果时,有时可能会有不满意的地方,但是很难修改,也很难把它还原为原来的状态,这时我们就可以使用Layers(绘制层)来将雕刻的部分分到每一个层 ...

  8. TF基础3

    批标准化 批标准化(batch normalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的.深度神经网络随着深度加深,收敛会越来越慢,会导致梯度弥散问题(vanishing gr ...

  9. Python 函数部分练习题

    函 数 基 础 1.写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作2.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数 3.写函数,判断用户传入的 ...

  10. node——将用户提交的数据写入data.json文件

    前续 当我们在进行将数据提交到某个网页时,需要将提交数据保存下来 1.提交数据 2.获得数据 3.保存数据 先看提交数据: <!DOCTYPE html> <html lang=&q ...