Linq To Entities获取列表中的第二个最后一个条目

时间:2012-07-24 14:19:54

标签: linq entity-framework linq-to-entities

我有以下代码,它返回一个对象列表。

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

我想获得此列表中的第二个最后一个对象。

有没有人知道如何使用Linq to Entities做到这一点?

感谢。

2 个答案:

答案 0 :(得分:9)

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

<强>更新
@Dherik在他的评论中提出了一个很好的观点,即在LINQ to Entities中实际上不支持.Reverse,并且会导致在调用reverse的时候评估查询,而不是在调用.FirstOrDefault时。 See here用于所有(非)支持的方法。

替代方案(LINQ to Entities friendly)解决方案要求您有一个合适的字段来排序(无论如何必须是这种情况,否则“倒数第二”没有相关性):

var secondlast = _logService.GetLogEventsByItemID(137)
    .OrderByDescending(e => e.EventDate /* could be any db field */)
    .Skip(1)
    .Take(1)
    .FirstOrDefault();

答案 1 :(得分: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
像这样?