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

    冯瑞涛
  • 相关阅读:
    大家一起写mvc(二)
    大家一起写mvc(一)
    jquery读取XML 生成页面文件
    jquery点击区域显示或隐藏DIV,点击非该DIV的地方隐藏该DIV
    struts2 iterator排序
    解决JS传参中文乱码
    关于解决 请求被中止:无法建立SSL / TLS安全通道
    查看sqlserver被锁的表以及如何解锁
    查询sqlserver数据库视图、存储过程等包含特定的字符串
    C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?
  • 原文地址:https://www.cnblogs.com/finehappy/p/1578752.html
Copyright © 2011-2022 走看看