这是我试图解决的问题。我有3个数据库表 - 销售,客户和时间。一个销售记录仅链接到一个客户记录和一个时间记录。我想仅在1996年,根据地区(客户与特定地区相关联)的总销售情况来看待下列其他部门:假期,非假期,工作日和周末。这是我到目前为止粗略的查询,以及我想在评论中添加的内容。
var totalSales =
from s in sales
where s.Time.Year = 1996
group s by s.Customer.Region into g
select new { Region = g.Key,
Holidays = g.Sum(s => s.Total_Amount), // WHERE (s => s.Time.Holiday_flag = true)
NonHolidays = g.Sum(s => s.Total_Amount), // WHERE (s => s.Time.Holiday_flag = false)
Weekdays = g.Sum(s => s.Total_Amount), // WHERE (s => s.Time.Weekday_flag = true)
Weekends = g.Sum(s => s.Total_Amount)}; // WHERE (s => s.Time.Weekday_flag = false)
为此,我需要能够在每个闭包内进一步限制结果。这可能吗?我需要重新构建查询吗?我当然可以通过将它分成4个单独的查询来实现这一点,但是在一个查询中完成它会非常好。
感谢。
答案 0 :(得分:6)
嗯,你可以试试这个:
Holidays = g.Where(s => s.Time.Holiday_flag).Sum(s => s.Total_Amount),
NonHolidays = g.Where(s => !s.Time.Holiday_flag).Sum(s => s.Total_Amount),
Weekdays = g.Where(s => s.Time.Weekday_flag).Sum(s => s.Total_Amount),
Weekends = g.Where(s => !s.Time.Weekday_flag).Sum(s => s.Total_Amount)
或:
Holidays = g.Sum(s => s.Time.Holiday_flag ? s.Total_Amount : 0),
// etc