У меня следующий запрос SQL:
select
p1.[id],
p1.[useraccountid],
p1.[subject],
p1.[message],
p1.[views],
p1.[parentid],
max(
case
when p2.[created] is null then p1.[created]
else p2.[created]
end
) as LastUpdate
from forumposts p1
left join
(
select
id, parentid, created
from
forumposts
) p2 on p2.parentid = p1.id
where
p1.[parentid] is null
group by
p1.[id],
p1.[useraccountid],
p1.[subject],
p1.[message],
p1.[views],
p1.[parentid]
order by LastUpdate desc
Используя следующий класс:
public class ForumPost : PersistedObject
{
public int Views { get; set; }
public string Message { get; set; }
public string Subject { get; set; }
public ForumPost Parent { get; set; }
public UserAccount UserAccount { get; set; }
public IList<ForumPost> Replies { get; set; }
}
Как бы я повторил такой запрос в LINQ? Я пробовал несколько вариантов, но я не могу получить правильный синтаксис соединения. Это просто случай запроса, который слишком сложен для LINQ? Можно ли это сделать с помощью вложенных запросов, как?
Цель запроса - найти последние обновленные сообщения, то есть ответ на сообщение увеличит его до верхней части списка. Ответы определяются столбцом ParentID, который ссылается на себя.