2012-07-24 78 views

回答

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

更新
@Dherik使得該.Reverse實際上不支持LINQ到實體,並會導致查詢中調用反向,而不是在點被評估在他的評論好點撥打電話.FirstOrDefault。所有(不)支持的方法均爲See here

替代(LINQ到實體友好)的解決方案,您需要有一個合適的領域通過訂購(必須是這樣反正否則「倒數第二」沒有相關性):

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

謝謝你。 – tgriffiths 2012-07-24 14:25:19

+0

LINQ to Entities是否識別方法「Reverse()」? – Dherik 2015-02-26 18:37:29

+1

@Dherik。好點,雖然我希望你在兩年前看到這個!我更新了我的答案以提供更合適的解決方案。 – 2015-03-05 15:38:34

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 

喜歡這個?

+0

Carlos Brazao是的,那是另一種方式。謝謝。 – tgriffiths 2012-07-24 14:38:55

+2

@Luiz。這將工作,但會對數據庫進行兩次調用。一個做數量,另一個返回結果。 – 2012-07-24 14:41:49