कस्टम इकाइयों की सूची से शब्दकोश बनाने के लिए सर्वश्रेष्ठ LINQ तरीका

मेरे पास DeleteByVendor ऑब्जेक्ट्स की एक सूची है .. इसमें दो व्यावसायिक संस्थाएं हैं - विक्रेता और मूल्य पृष्ठ .. एक मूल्य पृष्ठ में कई विक्रेता हो सकते हैं .. और एक विक्रेता कई मूल्य-पत्रों में उपस्थित हो सकता है।

हमें एक ऐसे शब्दकोश को बनाने की आवश्यकता है जिसमें प्रत्येक मूल्य पृष्ठ और उस मूल्य पृष्ठ में मौजूद < विशिष्ट ) विक्रेताओं की संख्या होगी। एक मूल्य पृष्ठ उस शब्दकोश में केवल एक बार उपस्थित होना चाहिए।

LINQ श्रृंखला विधि दृष्टिकोण का उपयोग करके हम इसे कैसे कर सकते हैं?

नोट: "पी 3" के लिए गणना 1 होना चाहिए (हालांकि एक डुप्लिकेट रिकॉर्ड है)

class Program
{
    static void Main(string[] args)
    {

        List vendorsForPages = new List();

        DeleteByVendor item1 = new DeleteByVendor() { VendorID = "V1", VendorName = "Vendor1", PricePage = "P1", Description = "Description1" };
        DeleteByVendor item2 = new DeleteByVendor() { VendorID = "V2", VendorName = "Vendor2", PricePage = "P1", Description = "Description1" };
        DeleteByVendor item3 = new DeleteByVendor() { VendorID = "V1", VendorName = "Vendor1", PricePage = "P2", Description = "Description2" };
        DeleteByVendor item4 = new DeleteByVendor() { VendorID = "V1", VendorName = "Vendor1", PricePage = "P3", Description = "Description3" };
        //Duplicate
        DeleteByVendor item5 = new DeleteByVendor() { VendorID = "V1", VendorName = "Vendor1", PricePage = "P3", Description = "Description3" };

        Dictionary costPageVendorsCount = new Dictionary();

    }
}

public class DeleteByVendor
{
    public string VendorID { get; set; }
    public string VendorName { get; set; }
    public string PricePage { get; set; }
    public string Description { get; set; }
}
0
जोड़ा संपादित
विचारों: 2

2 उत्तर

आप PricePage द्वारा विक्रेता Id द्वारा समूह कर सकते हैं:

var costPageVendorsCount = vendorsForPages.GroupBy(v => v.PricePage)
                                          .ToDictionary(g => g.Key, 
                                                        g => g.GroupBy(gg => gg.VendorID)
                                                              .Count()
                                                       );
0
जोड़ा

पहले GroupBy विधि का उपयोग करके PricePage द्वारा अपनी सूची को समूहबद्ध करें। फिर शब्दकोश प्राप्त करने के लिए ToDictionary का उपयोग करें।

var results = vendorsForPages.GroupBy(v => v.PricePage)
                             .ToDictionary(g => g.Key,
                                           g => g.Select(x => x.VendorID)
                                                 .Distinct()
                                                 .Count());
0
जोड़ा
लेकिन यह अद्वितीय विक्रेता गिनती नहीं ले रहा है .. "पी 3" के लिए यह गिनती 2 के रूप में दिखा रहा है। यह 1 होना चाहिए
जोड़ा लेखक Lijo, स्रोत
@Lijo इसे अभी जांचें। मैंने अपना जवाब अपडेट कर लिया है।
जोड़ा लेखक MarcinJuraszek, स्रोत