繁体   English   中英

实体框架GroupBy有条件地在C#

[英]Entity framework GroupBy conditionally at C#

我想编写实体框架查询。 但是我的分组不是静态的,而是根据条件动态的。 我的查询如下。 但是,我不能给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();

尝试这个

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;
         }

试试这个,使用字符串键进行分组

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)
                 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM