我的Payment
表
DateIssue | Amount | CoursePaidForMonth |
2/3/2011 9:54:07 PM | 2000.00| 2
2/27/2011 2:22:58 PM | 80.00| 2
3/5/2011 11:14:56 PM | 80.00| 3
3/27/2011 2:22:58 PM | 80.00| 2
2/8/2011 6:32:45 PM | 80.00| 2
我想为上面的数据执行两组分组:
截止日期是每月27日,所以我想将下个月27日至26日的所有数据分组到一个组中。这是从gName
成功完成的。没问题 !!检查输出如下图所示。
DateIssue AppendCommToMonthΞΞ CoursePaidForMonthΞΞ TotalAmountΞΞ
2/8/2011 6:32:45 PM 2 2 2080.00
2/27/2011 2:22:58 PM 3 2 160.00
3/27/2011 2:22:58 PM 4 2 80.00
现在我想对同一个查询执行另一个分组。我想将CoursePaidForMonth
分组。意思是说,最终输出应该显示4行记录而不是3行,它从本月的27个到下个月的26个分组到一个组中,也由CoursePaidForMonth
分组。怎么做?
DateIssue AppendCommToMonthΞΞ CoursePaidForMonthΞΞ TotalAmountΞΞ
2/8/2011 6:32:45 PM 2 2 2080.00
2/27/2011 2:22:58 PM 3 2 80.00
3/5/2011 11:14:56 PM 3 3 80.00
3/27/2011 2:22:58 PM 4 2 80.00
我的代码在这里:
var result = from p in db.Payments
join soi in db.SaleOrderItems on p.ReferenceId equals soi.Id
join ct in db.CourseByTutors on soi.InventoryOrCourseId equals ct.CourseId
where p.PayType == (int)PayTypes.PayCourseFee
&& ct.TutorId == tutorId
let gName = (p.DateIssue.Value.Day < 27) ? (p.DateIssue.Value.Month) : (p.DateIssue.Value.Month % 12 + 1)
group p by new { gName} into g
select new
{
DateIssue = g.Select(x => x.DateIssue).First(),
AppendCommForWhichMonth = g.Key.gName,
CoursePaidForMonth = g.Select(x => x.CoursePaidForMonth).First(),
TotalAmount = g.Sum(x => x.Amount),
};
请建议..
答案 0 :(得分:1)
您需要在密钥中加入CoursePaidForMonth
。像这样:
var query = from p in db.Payments
join soi in db.SaleOrderItems
on p.ReferenceId equals soi.Id
join cbt in db.CourseByTutors
on soi.InventoryOrCourseId equals cbt.CourseId
where p.PayType == (int)PayTypes.PayCourseFee && cbt.TutorId == tutorId
orderby p.DateIssue
let AppendCommForWhichMonth = p.DateIssue.Month + p.DateIssue.Day < 27 ? 0 : 1
group p
by new { AppendCommForWhichMonth, p.CoursePaidForMonth }
into g
select new
{
g.First().DateIssue,
g.Key.AppendCommForWhichMonth,
g.Key.CoursePaidForMonth,
TotalAmount = g.Sum(p => p.Amount),
};