gpt4 book ai didi

LINQ 选择行 "max"版本

转载 作者:行者123 更新时间:2023-12-02 09:48:30 25 4
gpt4 key购买 nike

我正在使用 LINQ,并且尝试选择每个“CaseId”的“版本”列最大的行。

这是一个包含数据的示例表:

╔═════════╦══════════╦═════════╦══════════╗
║ Id ║ CaseId ║ Version ║ ParentId ║
╠═════════╬══════════╬═════════╬══════════╣
║ 1 ║ A ║ 0 ║ ║
║ 2 ║ A ║ 1 ║ 1 ║
║ 3 ║ A ║ 2 ║ 2 ║
║ 4 ║ B ║ 0 ║ ║
║ 5 ║ B ║ 1 ║ 4 ║
║ 6 ║ C ║ 0 ║ ║
╚═════════╩══════════╩═════════╩══════════╝

期望的结果是:

╔═════════╦══════════╦═════════╦══════════╗
║ Id ║ CaseId ║ Version ║ ParentId ║
╠═════════╬══════════╬═════════╬══════════╣
║ 3 ║ A ║ 2 ║ 2 ║
║ 5 ║ B ║ 1 ║ 4 ║
║ 6 ║ C ║ 0 ║ ║
╚═════════╩══════════╩═════════╩══════════╝

我使用的 LINQ 如下:

IEnumerable<Case> list =
(from c in db.DBCases
let maxVersion = db.DBCases.Max(c => c.Version)
where (c.Version == maxVersion)
orderby c.CaseId descending
select c);

当前仅返回具有整个表的最大版本的行,但忽略所有其他记录。

╔═════════╦══════════╦═════════╦══════════╗
║ Id ║ CaseId ║ Version ║ ParentId ║
╠═════════╬══════════╬═════════╬══════════╣
║ 3 ║ A ║ 2 ║ 2 ║
╚═════════╩══════════╩═════════╩══════════╝

最佳答案

您的where子句告诉它准确获取您所说的内容(仅 Cases 的版本等于整个表的最大版本)。可以这样想:

// This is 2.
int maxVersionOfWholeTable = db.DBCases.Max(c => c.Version);

// This is essentially what your query is doing:
var query = from c in db.DBCases
where c.Version == maxVersionOfWholeTable
select c;

相反,您可以使用分组来实现所需的结果:

var query = from c in db.DBCases
group c by c.CaseId into g
orderby g.Key descending
select g.OrderByDescending(x => x.Version).FirstOrDefault()

这个版本说:

首先,输入Cases按 CaseId 分组,给你这样的东西:

Group 1 (CaseId = A): 1, 2, 3
Group 2 (CaseId = B): 4, 5
Group 3 (CaseId = C): 6

然后对于每个组,按版本排序并获取顶部记录,如下所示:

Group 1 Ordered: [3], 2, 1
Group 2 Ordered: [5], 4
Group 3 Ordered: [6]

结果:3、5、6。

编辑 - 回到这个问题并意识到 g.OrderByDescending(x => x.Version).FirstOrDefault()这条线很适合解释发生了什么,但使用 Max() 会更清楚一些。在这种情况下,就像这样:

var query = from c in db.DBCases
group c by c.CaseId into g
orderby g.Key descending
select g.Max(x => x.Version)

关于LINQ 选择行 "max"版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20444918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com