You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ从分组查询中获取最后两条交易记录?

获取最后两条Transactions记录的解决方案

嘿,我看你现在需要从你的LINQ查询里提取最后两条Transactions相关记录对吧?先结合你给出的代码片段,我来帮你调整出合适的解决方案。

首先得明确:“最后两条”一般是指时间最新的两条记录,所以我们需要先按时间字段排序,再筛选出目标记录。下面分两种常见场景给出方案:

场景1:整个结果集中的最后两条记录

如果是要从所有符合条件的记录里,拿到时间最晚的两条,可以在你的原查询基础上,增加排序和取数逻辑:

var summary = (from tType in _context.CommandCentre.TransactionTypes
               join tSummary in _context.CommandCentre.TransSummary on tType.Id equals tSummary.TransactionType
               // 这里优化了枚举比较,不用转字符串,更高效且不易出错
               where tSummary.ChargeFlag == ChargeFlag.Overcharge
               group tSummary by new { tType.Name, tSummary.NumberOfTransactions, tSummary.PeriodDate } into gResult
               select new {
                   Fee = gResult.Key.Name,
                   NumberOfTransactions = gResult.Key.NumberOfTransactions,
                   PeriodDate = gResult.Key.PeriodDate
               })
               // 按时间字段倒序,让最新的记录排在前面
               .OrderByDescending(item => item.PeriodDate)
               // 取前2条,也就是最新的两条
               .Take(2)
               // 如果需要按时间正序展示(最早的那条在前),可以添加这个排序
               .OrderBy(item => item.PeriodDate)
               .ToList();

场景2:每个Fee分组下的最后两条记录

如果是要针对每个费用类型(Fee),分别取出该类型下的最后两条交易记录,就需要在分组内部做处理:

var summary = from tType in _context.CommandCentre.TransactionTypes
              join tSummary in _context.CommandCentre.TransSummary on tType.Id equals tSummary.TransactionType
              where tSummary.ChargeFlag == ChargeFlag.Overcharge
              // 只按费用名称分组,方便后续获取该组下的交易记录
              group tSummary by new { tType.Name } into gResult
              select new {
                  Fee = gResult.Key.Name,
                  // 分组内按时间倒序,取最后两条
                  LastTwoTransactions = gResult.OrderByDescending(trans => trans.PeriodDate)
                                               .Take(2)
                                               .Select(trans => new {
                                                   trans.NumberOfTransactions,
                                                   trans.PeriodDate
                                               })
                                               .ToList()
              };

小提示

  • 排序字段我用了PeriodDate,你可以根据实际业务调整为对应的时间字段(比如创建时间CreateDate等)。
  • 原代码里的ChargeFlag转字符串比较可以优化成直接枚举比较,避免字符串转换的性能损耗和潜在错误。

内容的提问来源于stack exchange,提问作者Navyseal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:09:31