您好我有以下查询来获取一些行
Where(x => (x.Year >= 2012 && x.Month >= 12) && (x.Year <= 2013 && x.Month < 2))
这应该返回给我2012.12
和2013.1
,但当然它不会返回任何行,因为month >=12
和month <2
都没有,所以我的问题是如何仅查看年份为euqal的行的月份?
离。仅针对month >=12
的行year >= 2012 and check month <2
行检查year <= 2013
。
我应该提一下,我的sql表只有
[Year] [int] NOT NULL,
[Month] [int] NOT NULL,
[Value] [float] NOT NULL,
答案 0 :(得分:1)
对于前,
Where(x => x.Year*12+x.Month >= 2012*12+12 && x.Year*12+x.Month < 2013*12+2)
答案 1 :(得分:1)
您似乎正在尝试从2012年12月到2013年2月进行范围查询。在这种情况下,您可以使用以下条件:
Where(x => ((x.Year > 2012 || (x.Year == 2012 && x.Month == 12)) // >= 12 makes no sense
&& (x.Year < 2013 || (x.Year == 2013 && x.Month < 2))
)
诀窍是根据x.Year >
vs x.Year ==
指定月份的不同条件,而不是使用x.Year >=
。
当然,更简单的方法是使用x
作为整个日期,如下所示:
Where(x => (x >= date.make(2012,12,01) && x <= date.make(2013, 02, 01)))
编辑:
仅针对年
的行检查month >=12
的行检查>= 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))
)
答案 2 :(得分:1)
[...]这应该让我回到2012.12和2013.1
让我觉得你想表达的是:
Where(x => (x.Year == 2012 && x.Month >= 12) || (x.Year == 2013 && x.Month < 2))