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

基于A_VERSION最大值分组查询TB_USER_ROUTE的C# LINQ实现

获取每个FK_CODE_TYPE对应最大A_VERSION的所有记录

现有TB_USER_ROUTE表数据:

+------------+----------------------+--------------------+------------+-----------------+---------+
| ID         | FK_CODE_TYPE         | A_SEQ              | A_IDNAME   | A_NAMEFULL      | A_VERSION|
+------------+----------------------+--------------------+------------+-----------------+---------+
| 1          | 1                    | 1                  |       A2   | 077-25000000    | 1       |
| 2          | 1                    | 2                  |       A3   | 075-12458969    | 1       |
| 3          | 2                    | 1                  |       A2   | 077-25000000    | 1       |
| 4          | 4                    | 1                  |       A2   | 077-25000000    | 1       |
| 5          | 4                    | 2                  |       A3   | 075-12458969    | 1       |
| 6          | 1                    | 1                  |       A2   | 077-25000000    | 2       |
| 7          | 1                    | 2                  |       A3   | 075-12458969    | 2       |

需要得到的目标结果:

+------------+----------------------+--------------------+------------+-----------------+---------+
| ID         | FK_CODE_TYPE         | A_SEQ              | A_IDNAME   | A_NAMEFULL      | A_VERSION|
+------------+----------------------+--------------------+------------+-----------------+---------+
| 6          | 1                    | 1                  |       A2   | 077-25000000    | 2       |
| 7          | 1                    | 2                  |       A3   | 075-12458969    | 2       |
| 3          | 2                    | 1                  |       A2   | 077-25000000    | 1       |
| 4          | 4                    | 1                  |       A2   | 077-25000000    | 1       |
| 5          | 4                    | 2                  |       A3   | 075-12458969    | 1       |

需求说明:获取每个FK_CODE_TYPE对应的最大A_VERSION的所有记录,比如FK_CODE_TYPE=1有4条记录,仅保留A_VERSION=2的两条。

当前代码只能获取每组第一条记录:

var result = tblist.GroupBy(x => x.FK_CODE_TYPE, (key,g) => g.OrderBy(e => e.A_SEQ).First());

解决方案

修改后的LINQ查询如下:

var result = tblist
    .GroupBy(x => x.FK_CODE_TYPE)
    .SelectMany(g => 
    {
        var maxVersion = g.Max(e => e.A_VERSION);
        return g.Where(e => e.A_VERSION == maxVersion).OrderBy(e => e.A_SEQ);
    })
    .ToList();

代码解释

  1. GroupBy:按FK_CODE_TYPE分组,将同类型的记录归为一组。
  2. SelectMany:展开每组的结果,确保返回每组内的多条符合条件的记录,而非单条。
  3. Max(e => e.A_VERSION):计算当前分组内的最大版本号。
  4. Where(e => e.A_VERSION == maxVersion):筛选出分组内版本号等于最大值的所有记录。
  5. OrderBy(e => e.A_SEQ):按A_SEQ排序,保证结果顺序与目标一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:25:24