2011-03-28 4 views
1

런타임에 채워지는 columnName 목록이 있다고 가정 해보십시오. 어떻게 같은 쿼리에 의해 그룹화 안에, 그 COLUMNNAMES의 각각의 평균 값을 생성하기 위해 LINQ 식을 사용합니다 :런타임 정보에서 익명 형식을 만드는 LINQ

 var result = from data in view.AsEnumerable() 
        group data by new {Group = data.Field<string>("group_no")} 
        into grp 
        select new 
        { 
         Group = grp.Key.Group, 


         //Add anonymous values for eachcolumn average 
        }; 

지금까지 내가 당신이 익명의 범위 내에서 열거 할 수 없습니다 말할 수있는?

이 방법이 있습니까?

감사합니다.

+0

그건 의미가 없습니다. 당신은 그 물건으로 아무 것도 할 수 없을 것입니다. 너 뭐하려고? – SLaks

답변

2

수 없습니다.

Averages = table.Columns.Cast<DataColumn>().ToDictionary(
    c => c.ColumnName, 
    c => grp.Average(dr => Convert.ToDouble(dr[c])) 
) 
나는 coulmn이 tyhpe 모르는 때문에 Convert.ToDouble이 필요

Average 특정 숫자 형식이 필요합니다 :

대신 사전을 만들 수 있습니다.
모든 열이 동일한 숫자 유형 인 경우이를 캐스팅으로 바꿀 수 있습니다.

+0

아이디어를 주셔서 감사합니다. 그러나 일부 열은 문자열이므로이 방법은 효과가 없습니다. 나는 단지 데이터 테이블 내의 선택된 수의 열에 대해서만 평균을 원한다. 그러나 이러한 열은 런타임에만 알 수 있습니다. –

+0

@Darren : 틀린; 'Convert.ToDouble'은 문자열을 파싱합니다. – SLaks

+0

미안 해요, 내가 명확해야 했어 - 나는 문자열을 구문 분석한다는 것을 알고 있지만 문자열에는 글자가 들어있다. –

0

익명 형식은 컴파일 타임에 만들어집니다. 런타임 정보에서 작성할 수 없습니다. 더욱이 익명 형식은 메서드 범위를 가지고 있으므로 반환 할 수 없으며 다른 곳에서 사용할 수 없습니다.

수행하려는 작업 (수행중인 작업, 수행중인 작업)에 따라 동적 유형을 살펴볼 수 있습니다. ExpandoObject로 시작하십시오. 또는 런타임에 컴파일 된 유형을 생성하는 것이 타당 할 수 있습니다. 예를 들어 TypeBuilder를 살펴보십시오.

관련 문제