Linq更多条件在同一行

本文关键字:一行 条件 Linq | 更新日期: 2023-09-27 18:13:16

嗨,我有以下查询来获取一些行

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

,这应该返回我2012.122013.1,但当然它不会返回任何行,因为没有month >=12month <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,

Linq更多条件在同一行

例如

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))
)