次の 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 列によって定義されます。