2013-05-12 56 views
2

您好我有以下查詢來獲取一些行LINQ的同一行

Where(x => (x.Year >= 2012 && x.Month >= 12) && (x.Year <= 2013 && x.Month < 2)) 

,應返回我2012.122013.1當然,因爲有沒有爲month >=12它不會返回任何行更多的條件和month <2,所以我的問題是如何檢查一年只有一年的行是一樣的行嗎?

ex。僅檢查month >=12行,其中year >= 2012 and check month <2僅適用於行year <= 2013

我要指出,我的SQL表中沒有日期時間字段只

[Year] [int] NOT NULL, 
[Month] [int] NOT NULL, 
[Value] [float] NOT NULL, 

回答

1

對於離,

Where(x => x.Year*12+x.Month >= 2012*12+12 && x.Year*12+x.Month < 2013*12+2) 
1

它看起來像你正試圖通過二月進行範圍查詢從2012年十二月在這種情況下,您可以使用以下條件:

Where(x => ((x.Year > 2012 || (x.Year == 2012 && x.Month == 12)) // >= 12 makes no sense 
     && (x.Year < 2013 || (x.Year == 2013 && x.Month < 2)) 
) 

技巧是指定diff根據x.Year > vs x.Year ==而不是使用x.Year >=的月份的不同條件。

當然是一個簡單的方法是使用x作爲一個整體的日期,就像這樣:

Where(x => (x >= date.make(2012,12,01) && x <= date.make(2013, 02, 01))) 

編輯:只爲行

檢查month >=12其中year >= 2012和檢查month <2只爲行其中year <= 2013

上述轉換成該LINQ表達式:

Where(x => ((x.Year < 2012 || (x.Year >= 2012 && x.Month == 12)) 
     && (x.Year > 2013 || (x.Year <= 2013 && x.Month < 2)) 
) 
+0

yee如果那個字段的類型是DateTime,請看我更新的問題。 – kosnkov 2013-05-12 12:18:01

+0

@kosnkov請參閱編輯。 – dasblinkenlight 2013-05-12 13:02:41

1

[...],應返回我和2012.12 2013.1

讓我想你想表達的是什麼:

Where(x => (x.Year == 2012 && x.Month >= 12) || (x.Year == 2013 && x.Month < 2))