2012-10-25 27 views
5

में रिकॉर्ड मर्ज करें मैं डेटाटेबल पंक्तियों से डुप्लीकेट ढूंढने में सक्षम हूं। निम्न की तरह:डुप्लिकेट पाएं और एकल डेटाटेबल सी #

var groups = table.AsEnumerable() 
     .GroupBy(r => new 
     { 
      c1 = r.Field<String>("Version"), 
     }); 
     var tblDuplicates = groups 
      .Where(grp => grp.Count() > 1) 
      .SelectMany(grp => grp) 
      .CopyToDataTable(); 

अब, मैं सभी डुप्लिकेट रिकॉर्ड्स को सिंगल में मर्ज करना चाहता हूं और इसके मूल्य कॉलम मान को जोड़ना चाहता हूं। डुप्लिकेट के साथ

DataTable:

सुंदर ज्यादा निम्नलिखित की तरह कोई डुप्लिकेट के साथ

Version Value 
1 2 

2 2 

2 1 

1 3 

2 1 

3 2 

DataTable और मूल्य अभिव्यक्त .:

Version Value 
1 5 

2 4 

3 2 

मैं इस लिंक जो के साथ इस करता है के बारे में जानकारी है प्रतिबिंब की मदद। http://forums.asp.net/t/1570562.aspx/1

ऐसा करने का कोई और तरीका?

संपादित करें: हालांकि, यदि मेरे पास दो कॉलम हैं, जैसे पांच कॉलम और मैं अभी भी वैल्यू कॉलम पर योग करना चाहता हूं और पुनर्विक्रेता समेकित डेटाटेबल में अन्य कॉलम डेटा की भी आवश्यकता है। यह कैसे करना है? यहां मुझे अपने परिणाम डेटाटेबल में संस्करण और मूल्य मिलता है। मैं मूल्यों के साथ अन्य कॉलम भी चाहता हूं।

संस्करण col1 col2 मूल्य

1 A A 2 

2 B B 2 

2 B B 1 

1 A A 3 

2 B B 1 

3 C C 2 

उत्तर

6
var result = table.AsEnumerable() 
      .GroupBy(r => r.Field<string>("Version")) 
      .Select(g => 
       { 
        var row = table.NewRow(); 
        row.ItemArray = new object[] 
         { 
          g.Key, 
          g.Sum(r => r.Field<int>("Value")) 
         }; 
        return row; 
       }).CopyToDataTable(); 

संपादित करें::

आप अन्य क्षेत्र रखना चाहते हैं तो नीचे दिए गए प्रयास करें:

var result = table.AsEnumerable() 
      .GroupBy(r => new 
       { 
        Version = r.Field<String>("Version"), 
        Col1 = r.Field<String>("Col1"), 
        Col2 = r.Field<String>("Col2") 
       }) 
      .Select(g => 
       { 
        var row = g.First(); 
        row.SetField("Value", g.Sum(r => r.Field<int>("Value"))); 
        return row; 
       }).CopyToDataTable(); 
+0

यह should't निम्नलिखित की तरह 'g.Count' के बजाय' g.Sum (x => x.Value) 'बनें? – Spontifixus

+0

@Spontifixus: आप सही हैं, –

+0

दाएं @ सोंटिफिक्सस संपादित करें। मैंने इसे संशोधित किया और यह काम कर रहा है। हालांकि, अगर मेरे पास दो कॉलम हैं, जैसे पांच कॉलम और मैं अभी भी वैल्यू कॉलम पर योग करना चाहता हूं और पुनर्विक्रेता समेकित डेटाटेबल में अन्य कॉलम डेटा की भी आवश्यकता है। यह कैसे करना है? यहां मुझे अपने परिणाम डेटाटेबल में संस्करण और मूल्य मिलता है। मैं मूल्यों के साथ अन्य कॉलम भी चाहता हूं। –