4

オブジェクトのリストを返す次のコードがあります。

var listOfLogins = _logService.GetLogEventsByItemID(137).ToList();

このリストの最後から 2 番目のオブジェクトを取得したいと思います。

Linq to Entities を使用してこれを行う方法を知っている人はいますか?

ありがとう。

4

2 に答える 2

9
var secondlast = _logService.GetLogEventsByItemID(137)
    .Reverse()
    .Skip(1)
    .Take(1)
    .FirstOrDefault();

更新
@Dherik は、.ReverseLINQ to Entities で実際にサポートされていないコメントで適切な点を指摘しており、 を呼び出す時点ではなく、reverse を呼び出す時点でクエリが評価されることになります.FirstOrDefault。サポートされているすべての (サポートされていない) メソッドについては、こちらを参照してください。

別の (LINQ to Entities に適した) ソリューションでは、順序付けに適したフィールドが必要です (そうでなければ、「最後から 2 番目」は関連性がありません)。

var secondlast = _logService.GetLogEventsByItemID(137)
    .OrderByDescending(e => e.EventDate /* could be any db field */)
    .Skip(1)
    .Take(1)
    .FirstOrDefault();
于 2012-07-24T14:20:59.833 に答える
0
    int[] items = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int item = items.Skip(items.Count() - 2).Take(1).Single();
    //will return 9

このような?

于 2012-07-24T14:30:51.973 に答える