2012-04-07 44 views
0

這裏我目前的一個月:讓所有的訂單是從本月

model.SalesForMonth = orders.Where(o => o.DateOfPayment.Value.Month == DateTime.Now.Month) 
          .Select(o => o.Total) 
          .Sum(); 

這不是工作的期望,因爲它也是取的是去年發生在同月的訂單。

當然,我可以比較一年的個月,但必須有一個我不熟悉的更富有表現力的解決方案。

我該如何幹淨地使用Linq? (如果相關,但orders不知道是一個IQueryable從實體框架

回答

6

最簡單的方法是創建一個起點和終點:

// TODO: Consider what time zone you want to consider the current date in 
var today = DateTime.Today; 
var start = new DateTime(today.Year, today.Month, 1); 
var end = start.AddMonths(1); // Exclusive end-point 

var query = orders.Where(o => o.DateOfPayment.Value >= start && 
           o.DateOfPayment.Value < end) 
         .Sum(o => o.Total) 
+0

這看起來很*優雅。 +1 – 2012-04-07 20:09:51

0

我不知道你想要什麼。你必須比較一年,以確保訂單來自今年。 我認爲你可以用linq這樣做:

model.SalesForMonth = orders.Where(o => (o.DateOfPayment.Value.Month == DateTime.Now.Month 
&& o.DateOfPayment.Value.Year == DateTime.Now.Year)) 
           .Select(o => o.Total) 
           .Sum(); 
+0

您的查詢方法並非如此簡單,因爲它需要數據庫中的日期處理函數,而不是簡單的範圍查詢(如Jon的答案)。此外,DateOfPayment列上的簡單索引不會用於您的查詢 - 兩個表達式索引來保存該字段的月份和年份可以完成這項工作,儘管我確信這不是一個好方法。 – 2012-04-08 01:50:02

相關問題