2017-10-04 76 views
1

下面我有一個示例表:檢索最後N行起價最後一行指定的值

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

使用EF,我想檢索最後一行開始行的最後一個數,其中行動=「開始」。

通過上面的示例表,結果應該是:

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 Action是同一張表中的一列。 –

+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'部分。 –