c#和LINQ:通过嵌套的query's值排序查询
本文关键字:查询 排序 query LINQ 嵌套 | 更新日期: 2023-09-27 18:06:12
我正在用ASP编写一个简单的论坛。. NET,它位于c#中的实体框架数据库之上。
每个Topic
对象都有一个导航属性Posts
,指向Post
对象的集合。每个Post
对象都有一个属性When
,表示发布的时间。
Post.Parent
为Topic
类型。Post.Identifier
和Topic.Identifier
是Int32
类型。只有Post
有When
属性;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表达式。什么好主意吗?
应该可以:
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
)