2

こんにちは、いくつかの行を取得するために次のクエリがあります

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

そして、これは私2012.12を返すはずです2013.1が、もちろん、との行がないため、行は返されませんmonth >=12month <2私の質問は、年がsthに等しい行に対してのみ月をチェックする方法です?

元。month >=12の行のみをチェックし、行の行year >= 2012 and check month <2のみをチェックします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次の行のみをチェックし、次の行のみを>= 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))
)
于 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 に答える