2009-05-05 6 views
14

J'ai une table de taux de change. Je dois obtenir le taux actuel et le taux précédent, puis comparer les résultats.comment obtenir un deuxième enregistrement en linq à sql

Je peux obtenir le premier enregistrement en utilisant FirstOrDefault. Lorsque j'utilise ElementAtOrDefault, l'erreur «L'opérateur de requête 'ElementAtOrDefault' n'est pas pris en charge» lorsque j'utilise ElementAtOrDefault. Comment puis-je obtenir un deuxième disque?

Répondre

31

Vous pouvez essayer ceci:

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

Si vous utilisez

.Take(2) 

vous obtiendrez le premier et le second.

EDIT- Si vous avez besoin à la fois le premier et le deuxième, puis ce qui précède sera plus efficace que runing votre requête deux fois:

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

Ou Ignorer (1) .Prenez (1) pour obtenir seulement 2e. – Blorgbeard

1

Select top 2 , puis sélectionnez le deuxième élément.

0

utilisation .Skip (1) Méthode

5

Take() retourne null si l'élément n'y est pas (de manière équivalente à FirstOrDefault()).

Si vous préférez une exception a été lancée (cos le second élément est pas là) comme premier() puis utilisez:

Skip(1).Single() 
4

Il y a un détail pas explicitement mentionné ici: FirstOrDefault retourne un Element, Skip(1).Take(1) retourne un ensemble de 1 élément; c'est-à-dire que le type renvoyé par Skip(1).Take(1) est IEnumerable, alors que FirstOrDefault ne l'est pas.

3

Essayez cette simple mise en œuvre cela pourrait être utile

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) 

va chercher le deuxième enregistrement de la collection.

Questions connexes