4

我有以下代码返回对象列表。

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

我想获得此列表中的倒数第二个对象。

有谁知道如何使用 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 友好)解决方案要求您有一个合适的字段来订购(无论如何必须是这种情况,否则“倒数第二个”没有相关性):

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 回答