2

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

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

这应该返回我2012.122013.1但当然它不会返回任何行,因为没有 for month >=12and month <2,所以我的问题是如何仅检查月份为 euqal 到 sth 的行?

前任。仅检查month >=12行 whereyear >= 2012 and check month <2仅检查行 where year <= 2013

我应该提一下,我的 sql 表只有没有 dateTime 字段

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

3 回答 3

1

例如,

Where(x => x.Year*12+x.Month >= 2012*12+12  && x.Year*12+x.Month < 2013*12+2)
于 2013-05-12T12:04:36.790 回答
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年份所在的行>= 2012month <2仅检查所在的行year <= 2013

以上转换为这个 LINQ 表达式:

Where(x => ((x.Year < 2012 || (x.Year >= 2012 && x.Month == 12))
         && (x.Year > 2013 || (x.Year <= 2013 && x.Month < 2))
)
于 2013-05-12T12:06:01.437 回答
1

[...] 这应该返回我 2012.12 和 2013.1

让我觉得你想表达的是:

Where(x =>  (x.Year == 2012 && x.Month >= 12) || (x.Year == 2013 && x.Month < 2))
于 2013-05-12T12:06:36.157 回答