• 转linq中的Single()、First()、Take(1) LINQ 标准的查询操作符 排序 orderby、thenby、Take


    Single():操作一个集合,同时强要求只有一个对象匹配,并返回这一个。

    First():操作一个集合,可以有多个对象匹配,但是只返回第一个。

    Take(1):操作一个集合,可以有对个对象匹配,单只返回第一个,但是这里返回的是一个集合,而不是单个的概念。

    要对序列排序,前面使用了 orderby  子句。下面复习一下前面使用 orderby descending  子句的例子。其中 
    赛手按照赢得比赛的次数进行降序排序,赢得比赛的次数是用关键字选择器指定的:

    private static void Ordering()
            {
    
    var racers = from r in Formula1.GetChampions()
                             where r.Country == "Brazil"
                             orderby r.Wins descending
                             select r; 
    
                foreach (var racer in racers)
                {
                    Console.WriteLine("{0:C}: {0:L}, {0:F}", racer);  //属性名的第一个字母
                }
    
    
            }

    orderby  子句解析为 OrderBy()方法,orderby descending 子句解析为OrderBy Descending()方法: 
    var racers = Formula1.GetChampions(). 
    Where(r = > r.Country == "Brazil"). 
    OrderByDescending(r = > r.Wins). 
    Select(r = > r);

    OrderBy() 和 OrderByDescending  ()方法返回 IOrderEnumerable<TSource>。这个接口派生于接口 
    IEnumerable<TSource>,但包含一个额外的方法CreateOrderedEnumerable- <TSource>()。 
    这个方法用于进一步给序列排序。

    如果根据关键字选择器来排序,两项的顺序相同,就可以使用 ThenBy()和 ThenByDescending  ()方法继续排序。

    这两个方法需要 IOrderEnumerable<TSource>才能工作,但也返回这个接口。

    所以,可以添加任意多个 ThenBy()和 ThenByDescending ()方法,对集合排序。

    使用 LINQ  查询时,只需把所有用于排序的不同关键字(用逗号分隔开)添加到orderby  子句中。

    这里, 
    所有的赛手先按照国家排序,再按照姓氏排序,最后按照名字排序。

    添加到 LINQ 查询结果中的Take()扩展方法用于提取前 10  个结果:

    private static void Ordering()
           {
    
               var racers = (from r in Formula1.GetChampions()
                             orderby r.Country, r.LastName, r.FirstName
                             select r).Take(10);
    foreach (var racer in racers)
               {
                   Console.WriteLine("{0:C}: {0:L}, {0:F}", racer);  //属性名的第一个字母
               }
           }

    Lambda表达式 使用OrderBy()和 ThenBy()方法可以执行相同的操作:

    private static void Ordering()
           {
    
               var racers = Formula1.GetChampions().
                  OrderBy(r => r.Country).
                  ThenBy(r => r.LastName).
                  ThenBy(r => r.FirstName).
                  Take(10);
    
    foreach (var racer in racers)
               {
                   Console.WriteLine("{0:C}: {0:L}, {0:F}", racer);  //属性名的第一个字母
               }
    
    
           }
  • 相关阅读:
    php apc 安装
    apaache php 日记设计
    memcache windows64 位安装
    JavaScript的作用域与闭包
    怎样写一个简单的操作系统?
    php 关于锁的一些看法
    Windows版本Apache+php的Xhprof应用__[2]
    Windows版本Apache+php的Xhprof应用
    使用TortoiseGit对Git版本进行分支操作
    机器学习数据不均衡问题
  • 原文地址:https://www.cnblogs.com/hitler/p/3589690.html
Copyright © 2020-2023  润新知