2012-02-10 12 views
5

के अनुसार डुप्लिकेट पंक्तियों का चयन करना मैं अपने डेटाग्रिड में उन पंक्तियों को प्रदर्शित करने का प्रयास कर रहा हूं, जो समान कॉलम-मान साझा करते हैं।LINQ: कॉलम-वैल्यू

उदाहरण के लिए, व्यक्तियों, जो एक ही उपनाम है के लिए, मैं इस कोशिश की:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => grp.Key); 

यह प्रतीत होता है काम करता है, के रूप में मेरे WPF डेटा ग्रिड इस आदेश के बाद पंक्तियां हैं ... अंततः यह केवल खाली पंक्तियों को प्रदर्शित करता है, क्योंकि कोई कॉलम किसी मान से भरा नहीं है।

या मैं व्यक्तियों के साथ इस की कोशिश की, जो एक ही शहर है:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.City).Where(grp => grp.Count() > 1).Select(grp => grp.Key).Select(a => a); 

वहाँ यह करने के लिए किसी भी उचित तरीका है?

+0

मुझे पूछे जाने वाले प्रश्न के बारे में अनिश्चितता है। स्पष्टीकरण के लिए, पहला कोड नमूना काम करता है, लेकिन दूसरा नमूना नहीं है? – Bryan

+0

दोनों काम नहीं करते हैं, क्योंकि पहले व्यक्ति केवल खाली पंक्तियां लौटाता है (लेकिन यह कम से कम कुछ देता है ...), और दूसरा कोई भी – SeToY

+1

कुछ नहीं देता है, इसका मतलब है कि आपके डेटाबेस में सुरनाम के लिए रिक्त मानों के साथ कई पंक्तियां हैं ? ऐसा लगता है कि वे दोनों काम कर रहे हैं, बस आपके द्वारा अपेक्षित डेटा वापस नहीं लौट रहे हैं। यह 'पता' और 'व्यक्ति' – Bryan

उत्तर

9

आप केवल अपने उदाहरण में महत्वपूर्ण चयन कर रहे हैं:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => **grp.Key**); 

मैं तुम्हें पूरी पंक्ति का चयन करने के करना कोशिश कर रहे हैं मान:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

प्रथम और अंतिम नाम की तुलना करना:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new Tuple<String, String>(a.ForeName, a.SurName)).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

संपादित करें: L2E के लिए, आप (मुझे लगता है कि) गुमनाम प्रकार का उपयोग कर सकते हैं:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new { a.ForeName, a.SurName }).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

उपरोक्त गलत हो सकता है- 100% सुनिश्चित नहीं है।

+0

के लिए कक्षा परिभाषाओं को देखने में मदद करेगा, धन्यवाद, मुझे विश्वास है कि यह काम करता है ... केवल सुरनामों की तुलना न करने के लिए क्वेरी को कैसे संशोधित करना चाहिए, लेकिन ForeNames भी? .GroupBy (a => a.ForeName, a.SurName) काम नहीं करता है। – SeToY

+0

आपका मतलब है "पंक्तियों को दिखाएं जो पहले नाम और अंतिम नाम से मेल खाते हैं"? मेरा संपादन देखें। –

+0

हां, पंक्तियां जहां फर्स्टनाम और लास्टनाम बराबर हैं – SeToY

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

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