Я пишу простой форум в ASP.NET, который находится поверх базы данных Entity Framework в C #.
Каждый Topic
объект имеет свойство навигации Posts
, указывающее на коллекцию Post
предметов.Каждый объект Post
имеет свойство When
, которое указывает, когда было сделано сообщение.
Post.Parent
имеет тип Topic
.Post.Identifier
и Topic.Identifier
- это тип Int32
.Только Post
имеет свойство When
;Topic
не имеет такого свойства.Topic.Parent
- это третий тип Forum
, на который ссылается его Identifier
.
Моя проблема заключается в следующем: я не могу найти способ сортировки всех объектов Topic по last пост сделан в каждой теме.Я пробовал это:
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 избегают меня.Есть идеи?