Linq更多条件在同一行
本文关键字:一行 条件 Linq | 更新日期: 2023-09-27 18:13:16
嗨,我有以下查询来获取一些行
Where(x => (x.Year >= 2012 && x.Month >= 12) && (x.Year <= 2013 && x.Month < 2))
,这应该返回我2012.12
和2013.1
,但当然它不会返回任何行,因为没有month >=12
和month <2
,所以我的问题是如何检查月份仅为行,其中年等于什么?
交货。
检查month >=12
只检查year >= 2012 and check month <2
只检查year <= 2013
。我应该提到我的sql表没有dateTime字段只有
[Year] [int] NOT NULL,
[Month] [int] NOT NULL,
[Value] [float] NOT NULL,
例如
Where(x => x.Year*12+x.Month >= 2012*12+12 && x.Year*12+x.Month < 2013*12+2)
[…,这应该返回2012.12和2013.1
让我觉得你想表达的是:
Where(x => (x.Year == 2012 && x.Month >= 12) || (x.Year == 2013 && x.Month < 2))
看起来您正在尝试进行从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 >
和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))
)