2009-05-05 27 views
14

Tengo una tabla de tasas de cambio. Necesito obtener la tasa actual y la tasa anterior y luego comparar los resultados.cómo obtener el segundo registro en linq a sql

Puedo obtener el primer registro usando FirstOrDefault.

Cuando utilizo ElementAtOrDefault, el error muestra "El operador de consulta 'ElementAtOrDefault' no es compatible". ¿Cómo puedo obtener un segundo disco?

Respuesta

31

Usted puede intentar esto:

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

Si utiliza

.Take(2) 

usted conseguirá la primera y la segunda.

EDIT- Si necesita tanto el primer como en segundo lugar, a continuación, lo anterior será más eficiente que runing su consulta dos veces:

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

O Saltar (1) .Tomar (1) para obtener solo 2do. – Blorgbeard

1

Seleccione la parte superior 2 , luego selecciona el segundo elemento.

5

Take (Saltee (1)) devuelve un valor nulo si el elemento no está allí (de modo es equivalente a FirstOrDefault()).

Si prefiere que fue arrojada una excepción (cos el segundo elemento no está allí) como el primero() a continuación, utilizar:

Skip(1).Single() 
4

Hay un detalle que no se menciona explícitamente aquí: FirstOrDefault devuelve un Element, Skip(1).Take(1) devuelve un conjunto de 1 elemento; es decir, el tipo devuelto por Skip(1).Take(1) es IEnumerable, mientras que FirstOrDefault no lo es.

3

Pruebe esta sencilla aplicación que esto podría ser útil

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 a buscar el segundo disco de la colección.