Сущность фреймворка GroupBy условно на C # - PullRequest
0 голосов
/ 09 января 2019

Я хочу написать запрос структуры объекта. Но моя группировка не статична, она динамически зависит от условий. Мой запрос как ниже. Но я не мог дать значение по умолчанию grouppedData. Потому что это меняется для каждого условия. Как мне этого добиться?

var grouppedData= ??????;

if (isCountrySelected && !isStateSelected && !isYearSelected)
{
   grouppedData = context.Students.GroupBy(p => new { p.country });
}
else if (!isCountrySelected && isStateSelected && !isYearSelected)
{
   grouppedData = context.Students.GroupBy(p => new { p.state });
}
else if (!isCountrySelected && !isStateSelected && isYearSelected)
{
   grouppedData = context.Students.GroupBy(p => new { p.year });
}
else if (isCountrySelected && isStateSelected && !isYearSelected)
{
   grouppedData = context.Students.GroupBy(p => new { p.country,p.state });
}
else if (!isCountrySelected && isStateSelected && isYearSelected)
{
   grouppedData = context.Students.GroupBy(p => new { p.state, p.year });
}
else if (isCountrySelected && !isStateSelected && isYearSelected)
{
   grouppedData = context.Students.GroupBy(p => new { p.country, p.year });
}
else if (isCountrySelected && isStateSelected && isYearSelected)
{
   grouppedData = context.Students.GroupBy(p => new { p.country, p.state, p.year });
}


var result= grouppedData.Select(p => new
   {
       PrimaryStudentCount = p.Sum(k => k.PrimaryStudent),
       SecondaryStudentCount = p.Sum(k => k.SecondaryStudent),
       UniversityStudentCount = p.Sum(k => k.UniversityStudent),
       MaleStudentCount = p.Sum(k => k.MaleStudent),
       FemaleStudentCount = p.Sum(k => k.FemaleStudent),
       .
       .
       .
    }).ToList();

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Попробуйте это

IQueryable<IGrouping<object, Student>> groupedData= null;

Ваши условия здесь ...

var result = GetGroupDataResult(groupedData);

Теперь вызовите функцию ...

private object GetGroupDataResult(IQueryable<IGrouping<object, Student>> groupedData)
        {
          var result = groupBy.Select(p => new
            {
               PrimaryStudentCount = p.Sum(k => k.PrimaryStudent),
               SecondaryStudentCount = p.Sum(k => k.SecondaryStudent),
               UniversityStudentCount = p.Sum(k => k.UniversityStudent),
               MaleStudentCount = p.Sum(k => k.MaleStudent),
               FemaleStudentCount = p.Sum(k => k.FemaleStudent),
               .
               .
               .
            }).ToList();

           return result;
         }
0 голосов
/ 09 января 2019

Попробуйте, используйте строковый ключ для группировки

var grouppedData=from i in context.Students
                 let mykey = (condition1 ? string.Format(...) :
                              condition2 ? string.Format(...) :
                              condition3 ? string.Format(...) : ...)
                 group by mykey int g
                 select new
                 {
                   PrimaryStudentCount = g.Sum(k => k.PrimaryStudent),
                   SecondaryStudentCount = g.Sum(k => k.SecondaryStudent)
                 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...