2012-11-21 1 views
1

DataTable에 group-by를 적용하기 위해 Linq 쿼리를 작성하여 결과를 DataTable으로 출력하고 싶습니다. Linq C# Groupby on datatable

나는 var 형식으로 결과를 반환이 코드를 시도,하지만 난 당신이 적절한 답을 찾는 데 도와주세요 수 DataTable

var query = from row in dt.AsEnumerable() 
      group row by row.Field<DateTime>("ExpDate").Year into grp 
      select new 
      { 
       Years = grp.Key, 
       RSF = grp.Sum(r => r.Field<decimal>("SpaceRSF")) 
      }; 

하시기 바랍니다에 결과를 원한다. YearsRSF :

+0

:

그냥 결과 다음 달성하기 위해 그 기사 (ObjectShredder<T>)에서 코드를 사용할 수 있습니까? –

+0

DataTable dts = dt.AsEnumerable() 행에서 행 그룹 행을 행별로 표시합니다 .Field ("ExpDate"). var type이 아닌 것처럼 – user1619672

+2

형식으로 입력해야합니다. http://stackoverflow.com/a/1253737/1744834 DataTable 및 IEnumerable 대답을하지 않으려면 대답 –

답변

0

좋아, 그래서이

select new 
      { 
       Years = grp.Key, 
       RSF = grp.Sum(r => r.Field<decimal>("SpaceRSF")) 
      }; 

code which return result as var type에 따라 효과적으로 두 가지 속성을 가진 개체의 컬렉션을 반환합니다.
대신 데이터 테이블을 갖고 싶다면 모든 데이터를 데이터 테이블에 넣는 코드를 작성하십시오. 기본적으로 다음과 같이 보일 수 있습니다.

DataTable table = new DataTable(); 
table.Columns.Add("Years"); 
table.Columns.Add("RSF"); 
foreach(var item in query) 
{ 
    table.Add(item.Years, items.RSF) 
} 

희망이 있습니다.

+0

주셔서 감사합니다, 나는 당신이 제안한 것과 동일하지만이 경우에 우리가 여분의 foreach 루프를 실행할 수 있습니다 생각하고 싶지 않아요. foreach를 수행하고 가능하면 직접 datatable 출력을 얻습니다. – user1619672

2

How to: Implement CopyToDataTable -이 항목에서는 DataRow 이외의 형식의 제네릭 매개 변수 T를 사용하는 두 개의 사용자 지정 CopyToDataTable 확장 메서드를 구현하는 방법에 대해 설명합니다. "나는 데이터 테이블에 결과를 원한다"당신이 무슨 말을 뜻

DataTable table = query.CopyToDataTable();