2009-05-05 15 views
14

Mam tabelę kursów walut. Muszę uzyskać aktualną stawkę i poprzednią stawkę, a następnie porównać wyniki.jak zdobyć drugi rekord w linq do sql

Mogę uzyskać pierwszy rekord za pomocą FirstOrDefault.

Podczas korzystania z ElementAtOrDefault, komunikat błędu "Operator zapytania" ElementAtOrDefault "nie jest obsługiwany". Jak mogę uzyskać drugi rekord?

Odpowiedz

31

Można spróbować to:

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

Jeśli używasz

.Take(2) 

dostaniesz pierwszy i drugi.

Edit- Jeśli potrzebujesz zarówno pierwszy jak i drugi, to powyższe będzie bardziej wydajny niż runiczny zapytanie dwukrotnie:

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

Lub Pomiń (1). Wykonaj (1), aby uzyskać tylko 2. – Blorgbeard

1

Wybierz top 2 , a następnie wybierz drugi element.

5

pobrać() zwraca zerowy, jeżeli element nie ma (a więc jest równoważna FirstOrDefault()).

Gdybyś raczej wyjątek (cos drugiego elementu nie ma) jak pierwszy(), a następnie użyć:

Skip(1).Single() 
4

Jest szczegół nie są wyraźnie wymienione tutaj: FirstOrDefault zwraca Element, Skip(1).Take(1) zwraca zestaw 1 elementu; tj. typ zwracany przez Skip(1).Take(1) jest IEnumerable, natomiast FirstOrDefault nie jest.

3

Spróbuj prosta implementacja może to być przydatne

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) 

pobierze drugi rekord w kolekcji.