![](/img/trans.png)
[英]C# Conditionally disposing of Entity Framework DbContext only when needed
[英]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.