2009-05-05 3 views
14

Ho una tabella dei tassi di cambio. Devo ottenere la frequenza attuale e la frequenza precedente e quindi confrontare i risultati.come ottenere il secondo record in linq a sql

È possibile ottenere il primo record utilizzando FirstOrDefault.

Quando utilizzo ElementAtOrDefault, l'errore mostra "L'operatore di query 'ElementAtOrDefault' non è supportato". Come posso ottenere il secondo record?

risposta

31

si può provare questo:

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

Se si utilizza

.Take(2) 

si otterrà il primo e il secondo.

EDIT- Se è necessario sia il primo e il secondo, poi il sopra sarà più efficiente di runing la query due volte:

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

Oppure Skip (1) .Take (1) per ottenere solo il 2 °. – Blorgbeard

1

Seleziona superiore 2 , quindi seleziona il secondo elemento.

0

Uso .Skip (1) Metodo

5

Take() restituisce null se l'elemento non c'è (così è equivalente a FirstOrDefault()).

Se si preferisce È stata generata un'eccezione (cos il secondo elemento non c'è) come First() quindi utilizzare:

Skip(1).Single() 
4

C'è un dettaglio non esplicitamente menzionati qui: FirstOrDefault restituisce un Element, Skip(1).Take(1) restituisce un insieme di 1 elemento; il tipo restituito da Skip(1).Take(1) è IEnumerable, mentre non lo è il numero FirstOrDefault.

3

Prova questa semplice implementazione questo potrebbe essere 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) 

verrà recuperato il secondo record nella raccolta.