2009-05-05 88 views
14

我有一個匯率表。我需要得到目前的速度和先前的速度,然後比較結果。如何獲得linq的第二條記錄到sql

我可以使用FirstOrDefault獲得第一條記錄。

當我使用ElementAtOrDefault時,錯誤顯示「不支持查詢運算符'ElementAtOrDefault'」。我如何獲得第二個記錄?

回答

31

你可以試試這個:

var query=data.Skip(1).Take(1); 
3

如果使用

.Take(2) 

你會得到第一和第二。

編輯 - 如果你需要第一和第二的話,上面會比乳寧查詢兩次,更高效:

.Take(1) 
.Skip(1).Take(1) 
+2

或跳過(1)。拿(1)只得到第二個。 – Blorgbeard 2009-05-05 12:32:14

1

選擇前2 ,然後選擇第二個元素。如果該元素是不存在

0

使用.Skip(1)方法

5

取()返回null(所以相當於FirstOrDefault())。

如果你寧願拋出異常(COS第二個元素是不存在的)像一(),然後使用:

Skip(1).Single() 
4

這裏有沒有明確提及一個細節:FirstOrDefault返回ElementSkip(1).Take(1)返回一組元素;即由Skip(1).Take(1)返回的類型是IEnumerable,而FirstOrDefault不是。

3

試試這個簡單的實現,這可能是有用的

var query= (from p in db.Person where p.Person == person_id select p); 
var firstResult = query.First(); 
var secondResult = query.Skip(1).Take(1).Single(); 
var thirdResult = query.Skip(2).Take(1).Single(); 
1
Collection.ElementAt(1) 

將取回集合中的第二個記錄。

相關問題