2010-12-10 15 views
0

[Data]、[fkID]、[UserID]、[Timestamp]を格納するデータベーステーブル(Infoと呼ばれる)があります。 [データ]は実際には複数の列ですが、実際には関係ありません。C#Groupby Distinct

基本的に、ユーザーはフォームにデータを入力してフォームに新しい行をInfoに挿入できます。

私ができることをしたいのは、特定の[fkID]の各[UserID]から最新の[Data]項目を選択することです。これはLINQで行うことができます、私はそれを理解していないだけです。これまで私が持っているものは次のとおりです。

var q = (from i in db.Info 
     where i.fkID == @paramID 
     orderby Timestamp descending 
     groupby new {i.UserID}) 
     .Distinct() 

これは明らかに機能しません。正しいUserIDを返しますが、実際に必要な[Data]部分は返しません。ここで言葉に

は、私が何をしたいです:

特定fkIDとの情報の各エントリについて、私は、各ユーザーからの最近の行を選択します。

LINQでこれを行う方法を知りたいと思います。

答えて

3

を使用する必要がありますが、このように、各グループの最初の行を選択する必要があります。

var q = from i in db.Info 
     where i.fkID == @paramID 
     group i by i.UserID into g 
     select new { 
      UserID = g.Key, 
      Recent = g.OrderByDescending(i => i.Timestamp).First() 
     }; 
+0

これが右に見えます。私はまだそれをテストしていないが、私はそれが動作すると仮定します。私がそれを試してみると、あなたのことを正しいものにするでしょう。ありがとう。 – Shawn

0

あなたは.First()代わりの.Distinct()