2016-01-24 70 views
1

我有一個LINQ查詢返回前12個月就好了LINQ查詢不返回前6個月

var Last12query = from ech in this.dbContext.EmployeeCheckHistories 
          where ech.CompanyID == GlobalVariables.CompanyID && 
          ech.Employees.ClientID == GlobalVariables.Client 
          group ech by ech.CheckDate.Value.AddMonths(-12).Month into echG 
          orderby echG.Key ascending 
          select echG; 

但是當我嘗試拉前6個月返回相同的數據

var Last6query = from ech in this.dbContext.EmployeeCheckHistories 
          where ech.CompanyID == GlobalVariables.CompanyID && 
          ech.Employees.ClientID == GlobalVariables.Client 
          group ech by ech.CheckDate.Value.AddMonths(-6).Month into echG 
          orderby echG.Key ascending 
          select echG; 

我不確定爲什麼返回的數據仍然是12個月的價值。

這是我收到返回

[{"SeriesName":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"Value":[160536.62000,115787.74000,300994.32000,72237.43000,73189.97000,61357.57000,43790.03000,31074.86000,58405.69000,64351.36000,82715.84000,78962.98000]}, 
{"SeriesName":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"Value":[43790.03000,31074.86000,58405.69000,64351.36000,82715.84000,78962.98000,160536.62000,115787.74000,300994.32000,72237.43000,73189.97000,61357.57000]}] 
+3

如果我正確地閱讀它,代碼會將支票的日期轉移6或12個月,但不會按日期過濾。 where子句中不應該有日期嗎? – user1778606

+0

它應該按前6個月的日期進行分組。 – TheDizzle

回答

1

看來你不過濾查詢(WHERE子句)剛剛分組的JSON,所以你總是取得按月分組的所有行。 也從一個日期前一年減去12個monts,所以在你的情況下,當你只有月份編號分組時,它沒有任何影響。

如果你想從今天的最後N個月的數據,你應該有這樣的事情:

var dateLimit = DateTime.Today().AddMonths(-N); 
... 
where ech.CheckDate>=dateLimit 
group ech by ech.CheckDate.Month() 
... 
+0

由於查詢將被轉換爲SQL,因此不需要將'dateLimit'設置爲單獨的變量。我會保持內嵌的DateTime.Today()。AddMonths(-N)'。 – Enigmativity

+0

也許..我習慣從查詢中準備calcs以避免關於linq的異常,以至於不能轉換操作的實體,就像ToString()那樣,但是在這種情況下,它可以正常工作。順便提一下,如果可以,請將答案標記爲已解決。問候 – tede24

+0

我不能標記它解決。只有OP可以。 – Enigmativity

1

通過您的LINQ的Last12queryLast6query利用集團的寫做是錯誤的,在查詢對於Last6query,您剛剛將數據移至6個月前。不是月份本身的數據(你不會得到任何特定月份的適當數據),對於12個月的數據,它會很好,因爲你將它移動了一年。你可以在你的數據中看到這一點。因爲(任何一個月 - 6個月)都會有一個月。

所以做減法的月份不是解決方案,這樣做你的查詢。

var Last6query = from ech in this.dbContext.EmployeeCheckHistories 
         where ech.CompanyID == GlobalVariables.CompanyID && 
         ech.Employees.ClientID == GlobalVariables.Client 
         where ech.CheckDate.Value.Month>DateTime.Today().AddMonths(-6) 
         group ech by ech.CheckDate.Value.Month into echG 
         orderby echG.Key ascending 
         select echG; 

並且做12個月也是一樣。因爲你不是用月份和年份檢查,否則它會顯示年份錯誤(如果年份是2015年,它將顯示2014年的結果)。

var Last12query = from ech in this.dbContext.EmployeeCheckHistories 
         where ech.CompanyID == GlobalVariables.CompanyID && 
         ech.Employees.ClientID == GlobalVariables.Client 
         where ech.CheckDate.Value.Month>DateTime.Today().AddMonths(-12) 
         group ech by ech.CheckDate.Value.Month into echG 
         orderby echG.Key ascending 
         select echG;