0

我已经看过其他几个类似的帖子,但不能完全解决我的情况。如果我有一个包含许多帖子的论坛,我想获取最新帖子的列表 - 但每个主题只有一个帖子。所以我想要 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      |

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

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

1 回答 1

2

听起来您需要按 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);
于 2013-05-10T16:11:52.283 回答