[英]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.