2010-02-03 27 views
5

Tôi có một đơn giản IEnumerable<foo> foos; Bộ sưu tập này là một số kết quả từ cuộc gọi db.Tuyên bố LINQ để lặp qua bộ sưu tập và đảm bảo mỗi mục theo đúng thứ tự?

Tôi muốn đảm bảo rằng mỗi mục trong danh sách được sắp xếp một cách chính xác. Db hoặc trả về kết quả theo

  • được sắp xếp theo id, thấp nhất đến cao nhất. ví dụ. 1, 2, 3, 4 ,. ... vv
  • được sắp xếp theo ngày tạo, giảm (gần đây nhất, trước tiên).

Điều này có thể được thực hiện bằng câu lệnh nhanh chóng để kiểm tra điều này không?

ví dụ: Assert.IsTrue(.. insert linq statement here ..)

hiện tại, tôi có vòng lặp for và nhớ mục nhập trước đó và kiểm tra xem giá trị của giá trị đó, nếu có giá trị. Điều này cảm thấy ... cồng kềnh.

Bất kỳ ý tưởng nào?

Trả lời

4

Bạn có thể so sánh bộ sưu tập của bạn đến một phiên bản ra lệnh:

CollectionAssert.AreEqual(foos.ToList(), foos.OrderBy(f => f.Id)); 

Hoặc:

CollectionAssert.AreEqual(foos.ToList(), 
          foos.OrderByDescending(f => f.DateCreated)); 
+0

@Andy White, wow - điều đó rất thú vị! Tôi không bao giờ biết có một lớp CollectionAssert :) đó là tuyệt vời! Điều đó nói rằng, Khi tôi đã cố gắng để làm mã của bạn, tôi đã không phải làm một ToList() cho tham số đầu tiên ... nhưng đối với một thứ hai tôi DID phải thêm một .ToList() vào cuối của đó funct .. bạn có thể xác nhận điều đó không? –

+0

Ồ, rất tiếc, IEnumerable không có phương thức ToList(). Có một vài kỹ thuật khác nhau để chuyển đổi một IEnumerable thành một List. Bạn có thể áp dụng một cuộc gọi phương thức mở rộng no-op để đưa nó vào một định dạng có thể được chuyển đổi thành một Danh sách. –

2

Có một phương pháp mở rộng gọi là SequenceEqual mà sẽ làm điều đó. Tuy nhiên, đó cũng là một phương pháp khẳng định được gọi là CollectionAssert.AreEqual so sánh hai bộ sưu tập để đảm bảo chúng có cùng các mục trong cùng một thứ tự.

Các vấn đề liên quan