2010-10-26 16 views
5

मैं this जैसा कुछ हासिल करना चाहता हूं। लेकिन मुझे नहीं पता कि मैं उस समाधान का उपयोग कैसे कर सकता हूं।LINQ के साथ स्थिति के आधार पर एक संग्रह को भागों में विभाजित करें?

मेरे इकाई इन गुणों

CustomerName 
Date 
SortOrder 

मैं इस इकाई की पूरी सूची है है। मुझे क्या करना चाहते हैं, है समूह सूची < में उन सभी आइटम> जो है लगातार SortOrder और एक ही दिनांक और एक ही CUSTOMERNAME

उदाहरण इनपुट

var inv = new List<Invoice>(){ 
    new Invoice(){ CustomerName = "Abc" ,Date = DateTime.Today, SortOrder = 0}, 
    new Invoice(){ CustomerName = "Abc" ,Date = DateTime.Today, SortOrder = 1}, 
    new Invoice(){ CustomerName = "Abc" ,Date = DateTime.Today, SortOrder = 2}, 
    new Invoice(){ CustomerName = "xyz" ,Date = DateTime.Today.Subtract(TimeSpan.FromDays(1)), SortOrder = 3}, 
    new Invoice(){ CustomerName = "xyz" ,Date = DateTime.Today.Subtract(TimeSpan.FromDays(1)), SortOrder = 4}, 
    new Invoice(){ CustomerName = "Abc" ,Date = DateTime.Today, SortOrder = 5}, 
    new Invoice(){ CustomerName = "Abc" ,Date = DateTime.Today, SortOrder = 6} 
    }; 

उदाहरण आउटपुट

var invGrouped = new List<List<Invoice>> 
    { 
    new List<Invoice> 
     { 
     new Invoice {CustomerName = "Abc", Date = DateTime.Today, SortOrder = 0}, 
     new Invoice {CustomerName = "Abc", Date = DateTime.Today, SortOrder = 1}, 
     new Invoice {CustomerName = "Abc", Date = DateTime.Today, SortOrder = 2} 
     }, 
    new List<Invoice> 
     { 
     new Invoice {CustomerName = "xyz", Date = DateTime.Today.Subtract(TimeSpan.FromDays(1)), SortOrder = 3}, 
     new Invoice {CustomerName = "xyz", Date = DateTime.Today.Subtract(TimeSpan.FromDays(1)), SortOrder = 4} 
     }, 
    new List<Invoice> 
     { 
     new Invoice {CustomerName = "Abc", Date = DateTime.Today, SortOrder = 5}, 
     new Invoice {CustomerName = "Abc", Date = DateTime.Today, SortOrder = 6} 

     } 
    }; 

अद्यतन
गैर-LINQ समाधान भी पर्याप्त होगा।

+2

यह बहुत मदद मिलेगी और साथ ही वास्तव में क्या आप डेटा है कि उम्मीद करता है, तो आप डेटा की एक छोटा सा नमूना शामिल हो सकते हैं एक बार समूहबद्ध होने के बाद देखो। – diceguyd30

+0

@ diceguyd30! मैंने प्रश्न – IsmailS

+0

अपडेट किया है दो अन्य पंक्तियां क्यों नहीं हैं (ग्राहक नाम "एबीसी" और आज की डेटटाइम के साथ) उसी ग्राहक सूची में आज के अन्य ग्राहक "एबीसी" ऑर्डर क्यों हैं? –

उत्तर

5

यहाँ एक संभव LINQ जवाब है, हालांकि मुझे यकीन है कि एक अधिक कुशल एक मौजूद हूँ:

inv 
     .GroupBy(x => new { CustomerName = x.CustomerName, Date = x.Date }) 
     .SelectMany(x => x 
          .OrderBy(y => y.SortOrder) 
          .Select((y,i) => new { Value = y, Sort = y.SortOrder - i }) 
          .GroupBy(y => y.Sort) 
          .Select(y => y.Select(z => z.Value)) 
     ) 
+0

+1 बहुत बहुत धन्यवाद। अभी घर के लिए छोड़ रहे हैं। कल कोशिश करेंगे। – IsmailS

+0

आप महान हैं! यह आश्चर्यजनक काम करता है !!! आपने मुझे बहुत सी सिरदर्द और समय बचाया। मैं आप का आभारी हूँ। – IsmailS

+0

कोई समस्या नहीं! खुशी हुई यह काम किया! – diceguyd30

संबंधित मुद्दे