Sunday 15 March 2015

c# - Distinct by product id -


नीचे मेरी कक्षा है।

  सार्वजनिक वर्ग MyGroceryListItems {सार्वजनिक int productId {get; सेट; } सार्वजनिक स्ट्रिंग ProductName {get; सेट; } सार्वजनिक int मात्रा {प्राप्त करें; सेट; }}   

अब मैं डेटाबेस से इस वर्ग के मूल्यों को प्राप्त कर रहा हूं और उन वर्गों को IList & lt; MyGroceryListItems & gt; में डाल रहा हूं। हालांकि, कुछ समान डुप्लिकेट आइटम समान id हैं लेकिन विभिन्न मात्रा। मैं id द्वारा केवल विशिष्ट प्रविष्टियाँ कैसे ला सकता / सकती हूं?

मैंने कोशिश की है list.distinct लेकिन यह काम नहीं किया क्योंकि सभी प्रविष्टियां एक ही उत्पाद आईडी वाले रिकॉर्ड में समान नहीं हैं।

<पूर्व> IEnumerable & lt; MyGroceryListItems & gt; आइटम = ...; Var uniqueItemsByProdId = items.GroupBy (x => x.ProductId)। चयन करें (g = & gt; g.First ());

यह एक एकल (और कुछ हद तक मनमाने ढंग से) आइटम को उस मामले में उठाएगा जो एक आइटम से अधिक एक ProductId को दूसरे के साथ साझा करता है।

वैकल्पिक रूप से (और थोड़ा तेज) , आप DistinctBy एक्सटेंशन का उपयोग कर सकते हैं:

  सार्वजनिक स्थिर IEnumerable & lt; T & gt; अलग-तरह से & lt; T, TKey & gt; (यह IEnumerable & lt; T & gt; src, Func & lt; T, TKey & gt; चयनकर्ता) {HashSet & lt; TKey & gt; Hs = नया हैशसेट & lt; TKey & gt; (); Foreach (src में var आइटम) {// यदि फर्स्ट में पहले से ही सेट है तो रिटर्न फॉल्स जोड़ें (एच.एस.एड (चयनकर्ता (आइटम))) {रिटर्न आइटम रिटर्न; }}}   

इस तरह से:

  आइटम.डिस्टिफ़ाइन (x = & gt; x.ProductId)   

अधिक उपयोगी, शायद, एक ऐसी क्वेरी है, जो उत्पाद आयड द्वारा प्रत्येक आइटम के लिए कुल मात्रा देता है:

  आइटम .GroupBy (x = & gt; x.ProductId)। चयन करें (g = & gt; नई MyGroryListItems {G.Key.ProductId, g.Key.ProductName, Quantity = g.Sum (gg = & gt; gg.Quantity)})    

No comments:

Post a Comment