[英]C# and LINQ: ordering a query by a nested query's value
我正在ASP.NET中编写一个简单的论坛,该论坛位于C#中的Entity Framework数据库之上。
每个Topic
对象都有一个导航属性Posts
指向Post
对象的集合。 每个Post
对象都有一个属性When
,指示发布时间。
Post.Parent
是类型Topic
。 Post.Identifier
和Topic.Identifier
是Int32
类型。 只有Post
具有When
属性; Topic
没有这种属性。 Topic.Parent
是其Identifier
所引用的第三类Forum
。
我的问题是:我似乎找不到一种方法来按每个主题的最新文章对所有Topic对象进行排序。 我已经试过了:
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
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.