Запрос C # LINQ

#c# #linq

#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 вычисляется путем передачи среднего значения для каждой группы и среднего значения для группы 1 (по каждому исследованию) в функцию testFunction. Я не могу понять, как передать значение только для группы 1.

Надеюсь, это имеет смысл.

РЕДАКТИРОВАТЬ: Образец данных:

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

Итак, для приведенных выше данных я бы хотел, чтобы каждое среднее значение для каждой группы оценивалось по среднему значению для группы 1 в рамках того же исследования. Итак, если у меня есть, скажем, функция:

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

Используя приведенные выше данные, я бы сначала оценил исследование 1, группа 1 сама по себе, поэтому дважды передайте GeoAverage 3 и верните 9. Для исследования 1, группы 2, введите GA группы 2 в 5, а для исследования group1 GA в 3, возвращая 15.

Комментарии:

1. Ваши данные неясны; по чему вы не группируете? Я вижу, что вы используете Key только в инструкции select.

2. Образец данных и ожидаемые результаты также помогли бы…

3. Добавлена дополнительная информация. Спасибо.

Ответ №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);

        }