2010-02-03 10 views
5

我有一個簡單的IEnumerable<foo> foos;這個集合是來自db調用的一些結果。Linq語句遍歷集合並確保每個項目的順序是正確的?

我希望確保列表中的每個項目都是正確排列的。 Db要麼返回結果

  • 按ID排序,從低到高排列。例如。 1,2,3,4 ,. ...等
  • 按創建的日期排序,遞減(最近的,第一個)。

這可以用一個快速linq語句來完成..檢查這個嗎?

例如。 Assert.IsTrue(.. insert linq statement here ..)

目前,我有一個for循環,並記住前一個條目,並檢查是否值,如果有一個值。這感覺很麻煩。

任何想法?

回答

4

您可以您的收藏比較有序的版本:

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

或者:

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

@Andy White,哇 - 這非常有趣!我從來不知道有一個CollectionAssert類:)這真棒!這就是說,當我試圖做你的代碼時,我不必爲第一個參數做一個ToList()...但是對於第二個我必須添加一個.ToList()到該函數的結尾..你能確認一下嗎? – 2010-02-03 05:25:17

+0

呵呵,哎呀,IEnumerable沒有ToList()方法。有幾種不同的技術將IEnumerable轉換爲列表。您可能可以應用無操作擴展方法調用以將其轉換爲可轉換爲List的格式。 – 2010-02-03 05:53:24

2

有一個叫SequenceEqual一個擴展方法,這將做到這一點。但是,還有一個稱爲CollectionAssert.AreEqual的斷言方法,它比較兩個集合以確保它們具有相同順序的相同項目。