2011-04-21 6 views
2

나는 다음과 같은 쿼리가 :C#을 LINQ 쿼리

var results = from theData in GeometricAverage 
       group theData by new { study = theData.study, groupNumber = theData.groupNumber, GeoAverage= theData.GeoAverage } into grp 
       select new 
       { 
        study = grp.Key.study, 
        groupNumber = grp.Key.groupNumber, 
        TGI = testFunction(grp.Key.GeoAverage, Also here I want to pass in the GeoAverage for only group 1 (but for each individual study)) 
       }; 

내가하고 싶은 것은 각 연구를 위해, 각 그룹에 대해 GeoAverage 그림에 여러 그룹이 있다는 것을입니다. TGI는 각 그룹에 대한 GeoAverage 수치와 그룹 1에 대한 GeoAverage 수치 (각 스터디에 대한)를 testFunction에 전달하여 계산됩니다. 그룹 1의 값만 전달하는 방법을 알 수 없습니다.

희망적이라고 생각합니다.

편집 : 데이터의 샘플 :

Study Group GeoAverage 
1  1  3 
1  2  5 
1  3  6 
2  1  2 
2  2  3 
2  3  9 

그래서, 위의 데이터를 들면, 나는 각 그룹에 대해 각 GeoAverage 그림을 원하는 것이이 같은 연구에서 1 군의 GeoAverage 그림에 대해 평가한다. 그래서 함수 말할 경우 :

int foo(int a, int b) 
{ 
    return a * b; 
} 

위의 데이터를 사용하여, 내가 먼저 자체에 대한 연구 1, 1 군을 평가하고, 그래서 두 번 GeoAverage 3 전달 및 연구 1, 2 군, 패스 9.을 반환 2 학년 그룹은 2 학년이었고 5 학년 그룹은 3 학년이었으며 1 학년은 3 학년이었습니다. 15 012를 반환합니다.

+0

데이터가 명확하지 않습니다. 당신은 * 그룹화하지 않습니까? select 문에서'Key' 만 사용하는 것을 볼 수 있습니다. –

+0

데이터 샘플 및 예상 결과도 도움이 될 것입니다. –

+0

추가 정보가 추가되었습니다. 감사. –

답변

1

이제 해결했습니다. 값을 저장하고 다음 두 가지 LINQ 쿼리를 사용하는 데이터 컬렉션을 반복합니다.

foreach (var data in compoundData) 
     { 
      var controlValue = from d in GeometricAverage 
           where d.study == data.study 
           where d.groupNumber == "1" 
           select d.GeoAverage; 

      var treatmentValue = from l in GeometricAverage 
           where l.study == data.study 
           where l.groupNumber == data.groupNumber 
           select l.GeoAverage; 


      data.TGI = CalculateTGI(controlValue, treatmentValue); 

     }