zoukankan      html  css  js  c++  java
  • LINQ分组时如何进行组内排序?另外如何仅返回每组中满足条件的行(如Id最大的)?

    1、定义演示数据类型:

    public class TestData
    {
    public int GrpId { get; private set; }
    public int Id { get; set; }
    public int IdMod5 { get; private set; }
    public string Name { get; set; }

    public TestData(int id, string name)
    {
    Random _random
    = new Random();
    this.Id = id;
    this.Name = name;
    this.GrpId = this.Id % 3;
    this.IdMod5 = this.Id % 6;
    }
    }

    假定已初始化了如图的数据:

    2、演示分组时组内排序和组外排序方法:

    Console.WriteLine("\r\n演示组内按Name降序和组外按Key.RID升序:");
    var numberGroups
    = from n in testdatas
    orderby n.Name descending
    group n by
    new { n.IdMod5, RID = n.GrpId } into g
    orderby g.Key.RID
    select
    new { Remainder = g.Key, Numbers = g };
    foreach (var g in numberGroups)
    {
    Console.WriteLine(
    "Numbers with a remainder of {0} when divided by 5:", g.Remainder);
    foreach (var n in g.Numbers)
    {
    Console.WriteLine(
    "Id:{0} Name:{1} RID:{2} IdMod5:{3}", n.Id, n.Name, n.GrpId, n.IdMod5);
    }
    }

    运行结果见下图:

    3、演示先分组,然后每组里面仅取满足条件的行组:

    Console.WriteLine("\r\n演示先分组,然后每组里面仅取Id最大的行组:");
    var lets
    = from a in testdatas
    group a by a.GrpId into grp
    let maxId
    = grp.Max(a => a.Id)
    from row
    in grp
    where row.Id == maxId
    select row;

    foreach (var g in lets)
    {
    Console.WriteLine(
    "Id:{0} Name:{1} RID:{2} IdMod5:{3}", g.Id, g.Name, g.GrpId, g.IdMod5);
    }

    运行结果如下图:

     演示代码

  • 相关阅读:
    利用Selenium自动化web测试
    【译】.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱
    SlickGrid example 8:折线图
    SlickGrid example 7:鼠标事件
    SlickGrid example 6:Ajax加载
    SlickGrid example 5:带子项的展开收缩
    SlickGrid example 4: 过滤
    CentOS下配置iptables防火墙 linux NAT(iptables)配置
    ntp server
    parted
  • 原文地址:https://www.cnblogs.com/chriskwok/p/1774494.html
Copyright © 2011-2022 走看看