2009-05-05 38 views
14

Tôi có bảng tỷ giá hối đoái. Tôi cần có tỷ lệ hiện tại và tỷ lệ trước đó và sau đó so sánh kết quả.cách lấy bản ghi thứ hai trong LINQ to sql

Tôi có thể nhận bản ghi đầu tiên bằng FirstOrDefault.

Khi tôi sử dụng ElementAtOrDefault, lỗi hiển thị "Toán tử truy vấn 'ElementAtOrDefault' không được hỗ trợ". Làm thế nào tôi có thể có được kỷ lục thứ hai?

Trả lời

31

Bạn có thể thử này:

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

Nếu bạn sử dụng

.Take(2) 

bạn sẽ nhận được đầu tiên và thứ hai.

Edit- Nếu bạn cần cả hai người đầu tiên và thứ hai, sau đó ở trên sẽ có hiệu quả hơn runing truy vấn của bạn hai lần:

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

Hoặc Bỏ qua (1) .Take (1) để chỉ nhận được thứ 2. – Blorgbeard

1

Chọn top 2 , sau đó chọn phần tử thứ hai.

0

Sử dụng phương pháp

5

Đưa (.Skip (1)) trả về null nếu nguyên tố này là không có (như vậy là tương đương với FirstOrDefault()).

Nếu bạn muốn một ngoại lệ được ném (cos yếu tố thứ hai là không có) như First() sau đó sử dụng:

Skip(1).Single() 
4

Có một chi tiết không rõ ràng đề cập ở đây: FirstOrDefault trả về một Element, Skip(1).Take(1) trả về một tập hợp gồm 1 phần tử; tức là loại trả lại theo số Skip(1).Take(1)IEnumerable, trong khi FirstOrDefault thì không.

3

Hãy thử thực hiện đơn giản này này có thể có ích

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) 

sẽ lấy kỷ lục thứ hai trong bộ sưu tập.