2017-11-08 10 views
1

, 나는 과일의 매출 DataTable 유지 트랙을 가지고 같아 :
열의 고유 값을 찾고 다른 열의 동일한 값의 합계를 찾는 방법은 무엇입니까? 내 C#에서의 WinForm 응용 프로그램에서

/*TableA*/ 
Name | QuantitySold 
Apple | 5 
Orange | 10 
Apple | 3 
Grape | 2 
Banana | 6 
Orange | 7 
Apple | 2 
Grape | 2 

이 지금은 같은 과일 이름으로 그들을 필터링하고 그 과일의 각의 합을 얻으려면 내가 이것을 얻을 수있는 방법

/*TableB*/ 
Name | TotalSold 
Apple | 10 
Orange | 17 
Grape | 4 
Banana | 6 

처럼 어떤 보일 것이다, 새로운 결과 DataTable 만드는 동시에 판매? 내가

int distinctCt = TableA.AsEnumerable() 
       .Select(row=>row.Field<string>("Name")) 
       .Distinct().Count(); 

에 의해 서로 다른 과일 이름의 수를 발견하지만이 여기에서 아무데도 가지 않을 것이다 깨달았다. 누군가이 방법에 대한 아이디어를 제공해 주시겠습니까?

+2

당신에게 Distinct''보다 더 많은 도움이 될 것'GroupBy'를 검색합니다. – oerkelens

답변

1

사용 GroupBySum :

당신은 GROUPBY를 사용할 필요가
var nameGroups = TableA.AsEnumerable().GroupBy(r => r.Field<string>("Name")); 
var TableB = TableA.Clone(); 
TableB.Columns["QuantitySold"].ColumnName = "TotalSold"; 

foreach(var g in nameGroups) 
{ 
    TableB.Rows.Add(g.Key, g.Sum(r => r.Field<int>("QuantitySold"))); 
} 
+0

Omg 그것은 매력처럼 작동합니다. 언젠가 가능한 한 빨리 코드 스 니펫을 작성하고 싶습니다. 고맙습니다! –

0

,이 시도 :

var x = TableA.AsEnumerable() 
     .GroupBy(r=>r.Field<string>("Name")) 
     .Select(sm => new 
      { 
       Name = sm.First().Field<string>("Name"), 
       QuamtitySold = sm.Sum(q => q.Field<int>("QuantitySold")) 
      });