我已经看过其他几个这样的帖子,但是对于我的情况来说还不能完全解决。如果我有一个包含大量帖子的论坛,我想获得最新帖子的列表 - 但每个帖子只有一个帖子。所以我想要Distinct(threadID)但是最大(时间)。那些本身很容易,但我还想选择与该特定行相关的其他列
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 |
答案 0 :(得分: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);