2017-10-04 7 views
1

指定された値を持つ最後の行から開始する最後のN行を取得:EFを使用して私は下のサンプル表持つ

Id Action Qty 
1 Start 3 
2 Give 2 
3 Take 1 
... 
X Start 8 
X+1 Give 5 
X+2 Take 3 

を、私は最後の行から始まる行の最後の番号を取得したい場所をアクション= "スタート"上記試料台と

、結果は次のようになります

Id Action Qty 
X Start 8 
X+1 Give 5 
X+2 Take 3 

必ずしもそうではない最後のアクション=「スタート」行から2行がある場合、次のコードにのみ動作する。

var result = db.Sample.OrderByDescending(x => x.Id).Take(3); // not always 3 
+0

アクションは別のテーブルにありますか?もしそうなら '.Take(db.Actions.Count())'を実行して適切な量の行を取ることができます。 – dcg

+0

@dcgアクションは同じテーブルの列です。 –

+0

次に、 'db.Sample.Select(x => x.Action).Distinct()。Count()'のような処理を行い、その番号を 'Take'で使用できます。 – dcg

答えて

1

Startの最大値を見つけて、すべてのIDが最大でStart以上になるようにすることができます。実際には、データがソートされている場合、グループ化は必要ありません。

var maxIdOfStart = collection 
    .OrderByDescending(x => x.Id) 
    .First(x => x.Action == "Start"); 

var lastNOfStart = collection 
    .Where(x => x.Id >= maxIdOfStart.Id); 
+0

答えから 'group'部分を削除します。 –

関連する問題