簡體   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