2010-12-15 10 views
0

私はUserId、DatePosted、PostTextを持つPostsというテーブルがあるとします。 Entity FrameworkにSQLを生成させて、すべてのユーザーが最新の投稿のリストを取得する方法を教えてください。Entity Framework/LINQを使用しているすべてのユーザーから最新の投稿を取得する

SQLの場合、ユーザーは2つの投稿を同じタイミングで投稿しても動作しませんが、コードのエッジケースを除外することができます。

select * from 
    Posts p, 
    (select UserId, max(DatePosted) as DatePosted from Posts group by UserId) rp 
    where p.UserId=rp.UserId and p.DatePosted=rp.DatePosted; 

SQLは正しいポストを返すようですが、これをどのようにEntity Framework LINQに変換するのか分かりません。 「正確に同じ時間」の問題については

+0

、あなたの投稿のテーブルにrowversion列を使用し、ちょうどそれらのいずれかを最大をつかみます。 http://msdn.microsoft.com/en-us/library/ms182776.aspx – Brandon

答えて

0
IEnumerable<Post> posts = db.Posts 
    .GroupBy(p=>p.UserID) 
    .Select(p=>p.OrderByDescending(q=>q.DatePosted).First()); 
+0

シンプルでありながら複雑です。生成されたSQLを見ましたが、それほど素晴らしいものではありません。しかし、それは働いた! – joegtp

関連する問題