• LINQ 标准的查询操作符 设置操作符号 两个结果集的 并、交、差、唯一


    扩展方法Distinct()两个集合中的每一个列出了一次(唯一)、Union()并、Intersect()交和Except()差都是设置操作。下面创建一个驾驶Ferrari 的一级方程
    式冠军序列和驾驶McLaren 的一级方程式冠军序列,然后确定是否有驾驶Ferrari 和McLaren 的冠军(交集)。当然,
    这里可以使用Intersect()扩展方法。
    首先获得所有驾驶Ferrari 的冠军。这只是一个简单的LINQ 查询,其中使用复合的from 子句访问属性
    Cars,返回一个字符串对象序列。

    var ferrariDrivers = from r in
    Formula1.GetChampions()
    from c in r.Cars
    where c == "Ferrari"
    orderby r.LastName
    select r;
    现在建立另一个相同的查询,但where 子句的参数不同,以获得所有驾驶McLaren 的冠军。最好不要再
    次编写相同的查询。而可以创建一个方法,给它传送参数car:
    private static IEnumerable <Racer>
    GetRacersByCar(string car)
    {
    return from r in Formula1.GetChampions()
    from c in r.Cars
    where c == car
    orderby r.LastName
    select r;
    }
    但是,因为该方法不需要在其他地方使用,所以应定义一个委托类型的变量来保存LINQ 查询。

    变量racerByCar 必须是一个委托类型,

    它需要一个字符串参数(传值的参数),返回IEnumerable <Racer>,类似于前面实现的方法。

    为此,定义了带有两个泛型的委托Func<string, IEnumerable<Racer>> ,把一个λ表达式赋予变量racerByCar。

    λ表达式的

    左边定义了一个car 变量,其类型是Func 委托的第一个泛型参数(字符串)。

    右边定义了LINQ 查询,where 子句中会用到car,也就是Lambda的左值

    现在可以使用Intersect()扩展方法,获得既驾驶Ferrari 获得冠军,又驾驶McLaren获得冠军的车手,他们的交集

    private static void Intersect()
           {
               Func<string, IEnumerable<Racer>> racersByCar =
                  car => from r in Formula1.GetChampions()//对应,racersByCar("Ferrari"),car 是string 右式是根据car执行的匿名委托,调用的时候,根据Car获得Racer结果的方法
                         from c in r.Cars
                         where c == car
                         orderby r.LastName
                         select r;
    
               Console.WriteLine("champion with Ferrari and McLaren");
    
               foreach (var racer in racersByCar("Ferrari").Intersect(racersByCar("McLaren")))//返回结果是自身与参数集相交的部分
               {
                   Console.WriteLine(racer);
               }
           }

    结果只有一个赛手Niki Lauda:

    image

    冯瑞涛
  • 相关阅读:
    二 Capacity Scheduler 计算能力调度器
    一:yarn 介绍
    2.hbase原理(未完待续)
    1.安装hbase
    创建第一个vue项目
    初学vue(二)
    第一次面试
    面试题
    C#冒泡排序
    面试真题(.NET/Sqlserver/web前端)
  • 原文地址:https://www.cnblogs.com/finehappy/p/1578752.html
Copyright © 2020-2023  润新知