2011-01-28 7 views
0

私はしばらくこの状態にいました。様々なIDは可変配列を持つことができるように、新しい行が、発生した各「アクション」に追加されLinqラムダを使用して複数のレコードを含むビューからの最大シーケンス

id status  sequence 

1  open  1 

1  processing 2 

2  open  1 

2  processing 2 

2  closed  3 

:私は再発鍵及びこれと類似の配列を持つデータセットを持っています。各IDのMaxシーケンス番号を取得する必要がありますが、まだ完全なレコードを返す必要があります。

私が注文し、その後、結果をループし、これは個別のIDを選択せず​​に動作するように見えることはできませんID 1、およびID 2

ためのシーケンス3のシーケンス2で終わるしたいです最初の項目を別のリストに追加しますが、それは遅いです。

var ids = this.ObjectContext.TNTP_FILE_MONITORING.Select(i => i.FILE_EVENT_ID).Distinct(); 
List<TNTP_FILE_MONITORING> vals = new List<TNTP_FILE_MONITORING>(); 
      foreach (var item in items) 
      { 

       vals.Add(this.ObjectContext.TNTP_FILE_MONITORING.Where(mfe => ids.Contains(mfe.FILE_EVENT_ID)).OrderByDescending(mfe => mfe.FILE_EVENT_SEQ).First<TNTP_FILE_MONITORING>()); 
      } 

もっと良い方法が必要です。

答えて

0

は、ここで私のために働いていたものです:

var ts = new[] { new T(1,1), new T(1,2), new T(2,1), new T(2,2), new T(2,3) }; 
var q = 
    from t in ts 
    group t by t.ID into g 
    let max = g.Max(x => x.Seq) 
    select g.FirstOrDefault(t1 => t1.Seq == max); 

あなたが反復されているので、あなたの現在の方法であること

注意(ちょうどあなたのDataTableにそれを適用する必要がありますが、クエリはほぼ同じまま)すべてのレコードで、すべてレコードをデータストアから取得します。このようなクエリを使用すると、データストアに対するクエリへの変換が可能になります。これは高速であるだけでなく、必要な結果のみを返します(Entity FrameworkまたはLinq2SQLを使用していると仮定します)。

+0

これはria/silverlightアプリであり、明らかにFirst()メソッドが気に入らず、最終的なことを言っているので、あなたの提案を試してもうまくいきませんでした。私は、ObjectContextラッパーによってsidetrackedています。 – Robert

+0

代わりにFirstOrDefault()を試しましたか? – Botz3000

+0

はい、しかし、ここではバットのキックです。私はoracleデータベースに反対しています。外部アダプターや許可されていないものについてはエラーが発生します。私は正確なエラーを取得します。 – Robert

関連する問題