c#和LINQ:通过嵌套的query's值排序查询

本文关键字:查询 排序 query LINQ 嵌套 | 更新日期: 2023-09-27 18:06:12

我正在用ASP编写一个简单的论坛。. NET,它位于c#中的实体框架数据库之上。

每个Topic对象都有一个导航属性Posts,指向Post对象的集合。每个Post对象都有一个属性When,表示发布的时间。

Post.ParentTopic类型。Post.IdentifierTopic.IdentifierInt32类型。只有PostWhen属性;Topic没有这样的属性。Topic.Parent是由Identifier引用的第三种类型Forum

我的问题是:我似乎找不到一种方法来排序所有主题对象的最后帖子在每个主题。我试过了:

var topics = from t in context.Topics
             from p in a.Posts
             where t.Parent.Identifier == forum.Identifier
             orderby p.When descending
             select t;

但是我得到了重复的Topic对象,排序是而不是按最近发布日期降序。

然后我试了这个:

var topics = (from t in context.Topics
              let lastPost =
                  (from p in context.Posts
                   where p.Parent.Identifier == a.Identifier
                   orderby p.When descending
                   select p).FirstOrDefault().When
              where t.Parent.Identifier == forum.Identifier
              orderby lastPost descending
              select t).Distinct();

它消除了重复的问题,但仍然没有排序。我甚至尝试了另一个问题的建议:

var topics = (from t in context.Topics
              let posts = context.Posts.Where(p => p.Parent.Identifier == t.Identifier)
              let lastPost = posts.OrderByDescending(p => p.When).FirstOrDefault()
              where t.Parent.Identifier == forum.Identifier
              orderby lastPost.When descending
              select t);

不知道下一步该做什么;我似乎忘记了这些更高级的LINQ表达式。什么好主意吗?

c#和LINQ:通过嵌套的query's值排序查询

应该可以:

var topics = from t in context.Topics
             where t.Parent.Identifier == forum.Identifier
             let lastPost = t.Posts.OrderByDescending(p => p.When).First()
             orderby lastPost.When descending
             select t;

(假设Topic总是有一个或多个Post)