如何在 Linq GroupBy 中选择前 N 行

2024-04-18

希望你能在这里帮助我。 我有一个预订列表,我想在其中获取每组旅游运营商中的前两行。

这是数据示例:

List<Booking> list = new List<Booking>();
        list.Add(new Booking() { BookingNo = "31111111", DepDate = new DateTime(2011, 5, 1), TourOperator = "SPI" });
        list.Add(new Booking() { BookingNo = "32222222", DepDate = new DateTime(2011, 5, 2), TourOperator = "SPI" });
        list.Add(new Booking() { BookingNo = "33333333", DepDate = new DateTime(2011, 5, 3), TourOperator = "SPI" });
        list.Add(new Booking() { BookingNo = "34444444", DepDate = new DateTime(2011, 5, 4), TourOperator = "SPI" });
        list.Add(new Booking() { BookingNo = "35555555", DepDate = new DateTime(2011, 5, 5), TourOperator = "SPI" });
        list.Add(new Booking() { BookingNo = "36666666", DepDate = new DateTime(2011, 5, 6), TourOperator = "SPI" });
        list.Add(new Booking() { BookingNo = "11111111", DepDate = new DateTime(2011, 5, 1), TourOperator = "VIN" });
        list.Add(new Booking() { BookingNo = "12222222", DepDate = new DateTime(2011, 5, 2), TourOperator = "VIN" });
        list.Add(new Booking() { BookingNo = "13333333", DepDate = new DateTime(2011, 5, 3), TourOperator = "VIN" });
        list.Add(new Booking() { BookingNo = "14444444", DepDate = new DateTime(2011, 5, 4), TourOperator = "VIN" });
        list.Add(new Booking() { BookingNo = "15555555", DepDate = new DateTime(2011, 5, 5), TourOperator = "VIN" });
        list.Add(new Booking() { BookingNo = "16666666", DepDate = new DateTime(2011, 5, 6), TourOperator = "VIN" });
        list.Add(new Booking() { BookingNo = "17777777", DepDate = new DateTime(2011, 5, 7), TourOperator = "VIN" });

我有这个 Linq,但它只给我每个组中的第一个预订:

List<Booking> yetAnotherList = list.GroupBy(row => row.TourOperator)
            .Select(g => g.OrderBy(row => row.DepDate).First()).ToList();

我希望得到的数据是这样的:

31111111, 2011-05-01, SPI
32222222, 2011-05-02, SPI
11111111, 2011-05-01, 车辆识别号
12222222, 2011-05-02, 车辆识别号

Thanks.


Replace First() with Take(2)并使用SelectMany():

List<Booking> yetAnotherList = 
                 list.GroupBy(row => row.TourOperator)
                     .SelectMany(g => g.OrderBy(row => row.DepDate).Take(2)) 
                     .ToList();

Update: 忘记了SelectMany第一次。您想要展平结果(其中SelectMany是),否则你会得到一个列表IEnumerables.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Linq GroupBy 中选择前 N 行 的相关文章

随机推荐

  • 解析器组合器的类型

    如果我有一个解析器a Parser A和一个解析器b Parser B然后我可以将它组合成一个解析器a b Parser Either A B 这可行 但当您开始添加更多替代方案并获取类似类型时 会变得有点棘手Either A Either
  • Play Framework 2.6 CSRF 和会话

    我遇到了奇怪的问题 我正在我的网站上实现购物车功能 并使用会话来存储购物车位置 我有一个 POST 操作来将新位置添加到购物车 并且我启用了 CSRF 过滤器来保护网站 我在产品页面上用ajax调用它 所以第一次调用没问题 但第二次调用说未
  • Android相机参数setPictureSize导致图片出现条纹

    我正在尝试使用 Android 相机拍照 我需要捕获 1600 宽 x 1200 高 图像 第 3 方供应商要求 我的代码似乎适用于许多手机摄像头 但 setPictureSize 会导致某些手机 三星 Galaxy S4 三星 Galax
  • 为什么 Java 的 SSLSocket 发送版本 2 客户端问候?

    The SSLSocket getEnabledProtocols 方法返回以下内容 SSLv2Hello SSLv3 TLSv1 事实上 当我打电话时connect 并且我打开了 SSL 调试 我看到使用了 v2 客户端 hello ma
  • Java:BufferedReader 的 readLine 方法的效率和可能的替代方案

    我们正在努力减少延迟并提高用 Java 编写的进程的性能 该进程通过 readLine 方法从套接字消费数据 xml 字符串 缓冲读取器 http java sun com javase 6 docs api java io Buffere
  • /dev/mem的访问权限

    我有一系列关于 dev mem 网上很多文章 好像都提到了 dev mem作为通往 Physical RAM 但如果我是对的 dev mem是通往 Physical Address Space 处理器的控制寄存器可能包括许多硬件外设的控制寄
  • 如何创建 Android Spinner 作为弹出窗口?

    我想在用户点击菜单项时弹出一个旋转对话框 以允许用户选择一个项目 我是否需要一个单独的对话框 或者我可以直接使用 Spinner 吗 我懂了这个链接 http developer android com reference android
  • 美国边界线未添加到美国分散地区的 geom_map 地图中

    我有一张美国分散地区的地图 这是在以下问题中 包含数据链接 合并数据后 ggplot2 geom polygon 的映射变得疯狂 https stackoverflow com q 48469441 1813491 回答得很好 然后我尝试添
  • Gradle 同步失败:内容长度分隔的消息正文过早结束(预期:27633912;已接收:12844960)

    我已经安装了 Android Studio 3 1 4 但 Gradle 版本 4 4 未同步 它说 Gradle 同步失败 内容长度分隔的消息正文过早结束 预计 27633912 已收到 12844960 构建 Gradle https
  • 报告多个 Python 版本的累积覆盖率

    我的代码根据当前的 Python 版本有条件地运行 因为我支持同一包中的 2 6 2 7 和 3 3 我目前使用默认版本的 Python 生成这样的覆盖率报告 coverage run source mypackage setup py t
  • Node.js-“npm installexpress”错误:0906D06C:PEM 例程:PEM_read_bio npm

    我已经安装了node js 并且npm也随之安装了 在我的 Windows 命令提示符中 当我写 npm install express 时 它给出以下错误 如何解决这个问题 C 用户 gt npm v 2 11 2 C Users gt
  • 使用 vim 处理文本文件中的 \r \n ^M ​​^@

    当我将 excel 文件中的数据行保存为制表符分隔的 txt 文件 然后在 VIM 中打开这些文件时 我发现 excel 中曾经的多行文件现在是 VIM 中的单行文件 可以使用一些替换命令在 VIM 中分隔 行 s M r n g 此后 线
  • Ruby 相当于 perl 的“Data::Dumper”,用于打印深层嵌套的散列/数组

    这不是重复的Ruby 相当于 Perl Data Dumper https stackoverflow com questions 2159426 ruby equivalent of perl datadumper 这个问题已经存在超过
  • 如何下载 Java SE 6 更新 121?

    我需要 JDK6 来运行遗留应用程序 但我还需要 TLS 1 2 支持 这个链接 http www oracle com technetwork java javase overview 156328 html R160 121表示 Jav
  • CAPL 写入文本文件

    我对 CAPL 语言还很陌生 因此 我在将数据写入 txt 文件时遇到问题 这是我写的代码 includes variables message Generate Num Gen message Logger Logs msTimer ti
  • 在某些条件下使用钩子自动将一个分支合并到另一个分支?

    我的 github 存储库中有两个分支 master and dev分支 我有一个需要合并的要求master分支到dev在以下条件下分支 一旦 PR 直接合并到 master 分支 那么我需要自动将 master 分支合并回 dev 分支
  • 无法使用相同的私钥签署 Android 应用精简版

    我刚刚签署了我的付费应用程序 现在我想使用相同的私钥签署它的精简版 我现在的问题是 收到此错误 jarsigner 无法打开 jar 文件 我必须为其创建另一个密钥库吗 或者问题是否来自于我将其保存为不同的文件名 我能做些什么 谢谢 这个问
  • 在 Angular 8 应用程序中实现会话存储

    我正在构建一个电影应用程序来帮助我的学习 我想知道如何捕获按钮的点击次数并将其保存在会话存储中 我已经能够让点击工作了 它增加并显示每个按钮的点击次数 我用指令做到了这一点 我还尝试将按钮的 id 作为键和点击次数作为值附加到会话存储中 我
  • LabelledGeneric 获取类名

    我对 Shapeless 相当陌生 正如人们从我的问题中推断出来的那样 给定一个实例LabelledGeneric 如何获取它所代表的类的名称 我可以从中获取字段名称信息Keys 所以我想我需要一些其他类型的Witness它封装了类型本身
  • 如何在 Linq GroupBy 中选择前 N 行

    希望你能在这里帮助我 我有一个预订列表 我想在其中获取每组旅游运营商中的前两行 这是数据示例 List