2010-02-03 6 views
5

मुझे एक साधारण IEnumerable<foo> foos; मिल गया है यह संग्रह डीबी कॉल से कुछ परिणाम हैं।लिंक कथन संग्रह के माध्यम से पुन: प्रयास करने और यह सुनिश्चित करने के लिए कि प्रत्येक आइटम सही क्रम में है?

मैं यह सुनिश्चित करना चाहता हूं कि सूची में प्रत्येक आइटम सही तरीके से आदेश दिया गया हो। डीबी या तो परिणाम

  • आईडी द्वारा आदेश दिया गया है, जो निम्नतम से उच्चतम है। जैसे। 1, 2, 3, 4 ,. ... आदि
  • दिनांकित तिथि, आदेश (सबसे हालिया, पहले) द्वारा आदेश दिया गया।

क्या यह त्वरित लिनक कथन के साथ किया जा सकता है .. इसकी जांच करने के लिए?

उदाहरण के लिए। Assert.IsTrue(.. insert linq statement here ..)

वर्तमान में, मुझे लूप मिला है और पिछली प्रविष्टि को याद है और जांच करें कि क्या मूल्य है, यदि कोई मूल्य था। यह लगता है ... बोझिल।

कोई विचार?

उत्तर

4

आप एक आदेश दिया संस्करण के लिए अपने संग्रह की तुलना कर सकते:

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

या:

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

@ एंडी व्हाइट, वाह - यह बहुत दिलचस्प है! मुझे कभी नहीं पता था कि एक संग्रह एएसएसर्ट क्लास था :) यह कमाल है! उस ने कहा, जब मैंने आपका कोड करने की कोशिश की, तो मुझे पहले पैरामीटर के लिए ToList() करने की ज़रूरत नहीं थी ... लेकिन दूसरे के लिए मुझे उस कार्य के अंत में एक टोलीस्ट() जोड़ना पड़ा .. क्या आप बस इसकी पुष्टि कर सकते हैं, कृपया? –

+0

ओह, व्हाउप्स, आईन्यूमेरबल में टोलिस्ट() विधि नहीं है। एक सूची में IENumerable रूपांतरित करने के लिए कुछ अलग तकनीकें हैं। हो सकता है कि आप इसे एक प्रारूप में परिवर्तित करने के लिए नो-ऑप एक्सटेंशन विधि कॉल लागू करने में सक्षम हो सकें जिसे किसी सूची में परिवर्तित किया जा सके। –

2

एक विस्तार विधि SequenceEqual कहा जाता है जो कि क्या करेंगे नहीं है। हालांकि, CollectionAssert.AreEqual नामक एक जोरदार विधि भी है जो दो संग्रहों की तुलना करती है ताकि यह सुनिश्चित किया जा सके कि उनके पास एक ही क्रम में एक ही वस्तु है।