2012-10-25 15 views
5

Yinelenen verileri DataTable satırlarından bulabiliyorum. Aşağıdaki gibi: ŞimdiYinelenen ve tek bir kayıt dosyasına birleştirme kaydını bulun C#

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

, bekar için tüm yinelenen kayıtları birleştirmek ve onu Değeri sütun değer toplamak istiyorum. Birlikte yapar bu bağlantı hakkında farkındayım .:

Version Value 
1 5 

2 4 

3 2 

hiçbir tekrarlar da

Version Value 
1 2 

2 2 

2 1 

1 3 

2 1 

3 2 

DataTable ve Değer özetlenebilir: çoğaltır ile

DataTable:

Hemen hemen aşağıdaki gibi yansımanın yardımı. http://forums.asp.net/t/1570562.aspx/1

bunu yapmak için anyother yolu?

Düzenleme: Ancak, iki sütuntan fazla varsa, beş sütun gibi ve hala değer sütununda toplam yapmak istiyorum ve aynı zamanda resultant toplanan datatable diğer sütun verileri gerekir. Nasıl yapılır? Burada DataTable'ımdaki Sürüm ve Değer'i elde ediyorum. Değerleri olan diğer sütunları da istiyorum.

Sürüm col1 col2 Değer

1 A A 2 

2 B B 2 

2 B B 1 

1 A A 3 

2 B B 1 

3 C C 2 

cevap

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(); 

Düzenleme: Başka alanını korumak istiyorsanız

aşağıya deneyin:

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

bunu should't aşağıdaki gibi g.Count' yerine g.Sum (x => x.Value) olmalıdır? – Spontifixus

+0

@Spontifixus: Haklısınız, –

+0

Right @Spontifixus düzenlenmiştir. Bunu değiştirdim ve işe yarıyor. Ben beş sütun gibi ikiden fazla sütun var ve hala Değer sütun üzerinde toplamını yapmak istiyorum ve ayrıca gerekirse Ancak, resulatant diğer sütunlar veri Datatable özetlenebilir. Nasıl yapılır? Burada DataTable'ımdaki Sürüm ve Değer'i elde ediyorum. Değerleri olan diğer sütunları da istiyorum. –