2015-08-25 2 views
4

У меня есть две таблицы: отзывы и комментарии. У обратной связи может быть много комментариев. В принципе, простые отношения родительского ребенка.Linq заказ от родителей и детей

У меня есть страница, чтобы перечислить все отзывы и комментарии к ним, как это:

 
Feedback A 
Comment A1 
Comment A2 

Feedback B 
Comment B1 

Feedback C (note: no comments) 

Каждая обратная связь и комментарии имеют созданную дату. На данный момент я заказываю дату обратной связи, а затем дата комментария, поэтому у меня всегда есть новейшая обратная связь в верхней части, а затем все комментарии после этого.

То, что я пытаюсь достичь, заключается в следующем: когда новый комментарий добавляется в обратную связь, эта обратная связь должна отображаться в верхней части, независимо от того, сколько лет обратная связь или если обратная связь добавлена ​​без комментариев, эта обратная связь должна теперь быть первым элементом в списке. Давайте предположим, что комментарий будет добавлен в обратной связи B, после чего новая обратная связь без комментариев добавляется, то мой список будет выглядеть следующим образом:

 
Feedback D (this is the new feedback) 

Feedback B 
Comment B1 
Comment B2 (this is the new comment) 

Feedback A 
Comment A1 
Comment A2 

Feedback C (note: no comments) 

Теперь связь D будет находиться в верхней части списка, поскольку он имеет самая новая дата всех отзывов и комментариев и отзывов B будет второй, так как она содержит комментарий B2, который будет иметь вторую самую новую дату.

Это мой код до сих пор:

_repositories.Feedback 
.Include(f => f.Comments) 
.OrderByDescending(f => f.PublishedDate); 

То, что я хотел бы, чтобы изменить

.OrderByDescending(f => f.PublishedDate)
, чтобы получить правильный заказ. Возможно ли это?

ответ

2

Выбрать дату последнего комментария для каждого Feedback и сортировать по ним:

_repositories.Feedback 
.Include(f => f.Comments) 
.OrderByDescending(f => 
    f.Comments 
    .Select(c => (DateTime?)c.PublishedDate) 
    .OrderByDescending(c => c) 
    .FirstOrDefault() ?? f.PublishedDate 
) 
.ThenByDescending(f => f.PublishedDate); 
Смежные вопросы