Linq更多的条件在同一排

时间:2013-05-12 12:00:58

标签: c# linq linq-to-sql

您好我有以下查询来获取一些行

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

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

3 个答案:

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