2
我在ASP.NET中編寫一個簡單的論壇,該論壇位於C#中的實體框架數據庫之上。C#和LINQ:按嵌套查詢的值排序查詢
每個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();
它消除了重複的問題,但仍然沒有排序。我甚至試過a suggestion from another question:
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表達式讓我難以置信。有任何想法嗎?
完美的作品!只需將.First()更改爲.FirstOrDefault(),因爲它不是查詢中的最終調用。謝謝! – hydroiodic
@Thomas - 很好的答案。 – Enigmativity