gpt4 book ai didi

mysql - LINQ 选择不同的多列

转载 作者:行者123 更新时间:2023-11-29 08:31:26 24 4
gpt4 key购买 nike

我看过其他几篇类似的帖子,但无法完全解决我的情况。如果我有一个包含许多帖子的论坛,我想获取最新帖子的列表 - 但每个线程只有一个帖子。所以我想要 Distinct(threadID) 但 max(Time)。这些本身很简单,但我还想选择与该特定行相关的其他列

        var posts = from s in websiteDB.Forum_Post
orderby s.Time
select new ForumPostSummary()
{
UserID = s.UserID ?? default(int),
Time = s.Time ?? default(int),
Subject = s.Subject,
ThreadID = s.ThreadID ?? default(int)
};
posts = posts.Take(10);

示例表:

| UserID | Time  | Subject | ThreadID |
| 1 | 10:00 | ABC | 999 |
| 2 | 10:01 | Re:DEF | 998 |
| 3 | 10:02 | Re:ABC | 999 |
| 4 | 09:40 | DEF | 998 |
| 5 | 09:45 | Re:DEF | 998 |

我想要 userID 3(线程 999 的最新时间,以及总体的最新时间)和 userID 2(线程 998 的最新时间)的行。我引用 UserID 来获取结果只是为了解释我想要哪些行。我实际上是从 MySQL 数据库查询数据并将其插入到 SqlExpress 数据库中,尽管这个问题适用于两种数据库,但形式略有不同!

| 3      | 10:02 | Re:ABC  | 999      |
| 2 | 10:01 | Re:DEF | 998 |

最佳答案

听起来您需要按 ThreadID分组,然后按时间(降序)对每个组进行排序,并从每个组中获取第一个值。所以类似:

var posts = from s in websiteDB.Forum_Post
group s by s.ThreadID into thread
select thread.OrderByDescending(t => t.Time).First() into recent
select new ForumPostSummary
{
UserID = recent.UserID ?? default(int),
Time = recent.Time ?? default(int),
Subject = recent.Subject,
ThreadID = recent.ThreadID ?? default(int)
};
posts = posts.Take(10);

关于mysql - LINQ 选择不同的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16486437/

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