2008-11-09 9 views
5

2 कॉलम "श्रेणी" और "उपश्रेणी"नेस्टेड linq प्रश्न, अलग मूल्य कैसे प्राप्त करें?

की तालिका डेटा मैं "श्रेणी" का एक संग्रह, [उपश्रेणियाँ] प्राप्त करने के लिए नीचे दिए गए मैं डुप्लिकेट प्राप्त कोड का उपयोग करना चाहते हैं। डाल रहा है। बाहरी "से" के बाद() से ज्यादा मदद नहीं करता है। मुझे क्या याद आती है?

var rootcategories = (from p in sr.products 
           orderby p.category 
            select new 
            { 
             category = p.category, 
             subcategories = (
             from p2 in sr.products 
             where p2.category == p.category 
             select p2.subcategory).Distinct() 
            }).Distinct(); 

sr.products इस

category subcategory 
---------------------- 
cat1  subcat1 
cat1  subcat2 
cat2  subcat3 
cat2  subcat3 

तरह लग रहा है मैं क्या परिणाम में मिलता है

cat1, [subcat1,subcat2] 
cat1, [subcat1,subcat2] 

है, लेकिन मैं केवल एक प्रविष्टि

इस कोड के साथ मेरी समस्या हल करना चाहते हैं:

var rootcategories2 = (from p in sr.products 
           group p.subcategory by p.category into subcats 

           select subcats); 

अब शायद यह समय है कि क्या सही सवाल था के बारे में सोचना है .. (-:

उत्तर

5

स्वयं के लिए इस कोड के साथ हल

var rootcategories2 = (from p in sr.products 
           group p.subcategory by p.category into subcats 

           select subcats); 

धन्यवाद हर कोई

3

मैं तुम्हें 2 "अलग()" कॉल, उप-श्रेणियों के लिए मुख्य श्रेणियों के लिए और दूसरा की जरूरत है।

यह आप के लिए काम करना चाहिए:

var mainCategories = (from p in products select p.category).Distinct(); 

var rootCategories = 
    from c in mainCategories 
    select new { 
     category = c, 
     subcategories = (from p in products 
         where p.category == c 
         select p.subcategory).Distinct() 
    }; 
+1

नोट: अधिक groupbys अगली बार उपयोग करने के लिए सीख सकते हैं। – chakrit

1

आपका मुख्य प्रश्न पर उत्पाद है, तो आप प्रत्येक उत्पाद के लिए रिकॉर्ड प्राप्त करने के लिए जा रहे हैं। इसे चारों ओर स्विच करें ताकि आप श्रेणी पर पूछताछ कर रहे हों, लेकिन उत्पाद पर फ़िल्टरिंग। श्रेणी

2

अलग() के पीछे एल्गोरिदम को यह बताने का एक तरीका चाहिए कि स्रोत में 2 ऑब्जेक्ट्स IENumerable बराबर हैं या नहीं। इसके लिए डिफ़ॉल्ट विधि 2 ऑब्जेक्ट्स को उनके संदर्भ से तुलना करना है और इसलिए इसकी संभावना है कि कोई भी 2 ऑब्जेक्ट "बराबर" न हो क्योंकि आप उन्हें "नया" कीवर्ड बना रहे हैं।

आपको एक कस्टम क्लास लिखना है जो IENumerable लागू करता है और इसे अलग() कॉल में पास करता है।