2013-02-02 16 views
10

मेरे पास एक वीबीएनईटी एप्लीकेशन है और कई कॉलम पर समूह करना चाहता हूं।LINQ समूह एकाधिक पैरामीटर के साथ

वर्ग संरचना:

Public Class Person 
    Public Property Name as String 
    Public Property City as String 
    Public Property Country as String 
End Class 

Dim oResult = PersonList _ 
       .GroupBy(Function(v) New With {v.City, v.Country}) _ 
       .Where(Function(grp) grp.Count > 1).ToList() 

मैं कई व्यक्ति रिकॉर्ड है जो एक ही शहर का नाम & देश का नाम शामिल है। लेकिन उपर्युक्त क्वेरी मुझे शून्य आइटम देता है। अगर मैं केवल एक कॉलम शहर या देश का उपयोग कर रहा हूं तो यह ठीक काम कर रहा है।

Dim oResult = PersonList _ 
       .GroupBy(Function(v) v.City) _ 
       .Where(Function(grp) grp.Count > 1).ToList() 

कोई भी मुझे इंगित करता है कि मैं एकाधिक पैरामीटर के साथ LINQ क्वेरी के साथ समूह में गलत हूं।

उत्तर

18

समस्या यह है कि अज्ञात प्रकारों में केवल Key गुण समानता में उपयोग किए जाते हैं और वीबी में हैशिंग। (सी # गुमनाम प्रकार में सभी गुण प्रभावी रूप से प्रमुख गुण हैं।) तो आप बस करने के लिए आपकी क्वेरी को बदलने की जरूरत:

Dim oResult = PersonList _ 
       .GroupBy(Function(v) New With { Key v.City, Key v.Country}) _ 
       .Where(Function(grp) grp.Count > 1).ToList() 

अधिक जानकारी के लिए anonymous types in VB के दस्तावेज़ देखें।

+1

धन्यवाद! यह एक जादू की तरह काम करता है। –

2
Dim q1 = (From p In Repository.Table 
          Group p By p.CreatedDate.Year, p.CreatedDate.Month Into Group 
          Select New With {.Year = Year, .Month = Month, .Count = Group.Count()}).ToList 

या

Dim q2 = (From p In Repository.Table 
          Group p By key = New With {.Year = p.CreatedDate.Year, .Month = p.CreatedDate.Month} Into Group 
          Select New With {.Year = key.Year, .Month = key.Month, .Count = Group.Count()}).ToList