2011-03-03 40 views
3

這是我試圖解決的問題。我有3個數據庫表 - 銷售,客戶和時間。一個銷售記錄鏈接到一個客戶記錄和一個時間記錄。我想,僅在1996年,查看按地區劃分的總銷售額(客戶與特定區域相關),以下是進一步的劃分:假期,非假期,平日和週末。這裏是我迄今粗略的查詢,我試圖在評論中添加。在使用閉包的LINQ語句中,是否可以在閉包中指定where子句?

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個單獨的查詢來完成此任務,但是在一個查詢中完成這項工作真的很不錯。

謝謝。

回答

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 
+0

+1 - 我只是工作這件事。一如既往,太快............ – 2011-03-03 17:25:05

+0

這很完美,非常感謝。 – rybosome 2011-03-03 17:30:25

相關問題