2012-05-10 291 views
0

日付である文字列を比較したいと思います。私はlinqクエリを次のようにしていますが、文字列型のオペランドに演算子を適用できます。Linq比較文字列の日付

var descriptions = 
     from a in db.Descriptions 
     where a.ID == 12 
     && a.arrivalDate >= "20110101000000" 
     && a.arrivalDate <= "20110131000000" 
     select a; 

+1

あなたはDateTime' 'にそれらをキャストすることはできませんなぜですか? – MilkyWayJoe

+0

あなたは左手側と右手側を同じ日付タイプに変換する必要があります –

+0

は "a.arrivalDate"の文字列、またはDateTimeのデータ型ですか? –

答えて

1

あなたはString変数でDateTime変数を比較することはできません。

だから、DateTime最初に作成する必要があります。

String str1 = "20110101000000"; 
String str2 = "20110131000000"; 
String format = "yyyyMMddhhmmss"; 
DateTime d1 = DateTime.ParseExact(str1, format,null); 
DateTime d2 = DateTime.ParseExact(str2, format, null); 

とLINQクエリ:

var descriptions = 
    from a in db.Descriptions 
    let arrivalDate = DateTime.ParseExact(a.arrivalDate, format,null) 
    where a.ID == 12 
    && arrivalDate >= date1 
    && arrivalDate <= date2 
    select a; 
+0

ありがとうございますが、a.arrivalDateは文字列型で、日付は20110101000000の形式です。この場合、どうすればよいですか?何か案が? – mrd

+1

奇妙なことに、なぜDateTime.ParseExactではなく、すべての部分文字列を解析するのですか?そして、彼は日付をハードコーディングしているので(例では、とにかく)、どうして解析するのですか? –

+0

なぜDateTimesを文字列として格納していますか?それとは別に、上記と同じようにsimpplyすることができます。私は私の答えを編集します。 –

1

文字列クラスは、> =または< =をオーバーライドしません。静的String.Compare(string、string)メソッドを使用する必要があります。

+0

はい、String.Compareを使用する必要があります。ありがとうございました... –

2
var descriptions = db.Descriptions.Where(a => 
        a.ID == 12 && 
        a.arrivalDate >= Convert.ToDateTime("20110101000000") && 
        a.arrivalDate <= Convert.ToDateTime("20110131000000")); 
2

文字列ではなく、日付を比較したいと思っています。

"20110101000000"は、日付ではなく文字列です。

new DateTime(2011, 01, 01)は日付です。

var descriptions = from a in db.Descriptions   
        where a.ID == 12 
        && DateTime.Parse(a.arrivalDate) >= new DateTime(2011,1,1) 
        && DateTime.Parse(a.arrivalDate) <= new DateTime(2011,1,31) 
        select a; 
+0

a.arrivalDateと "20110101000000"、どちらも文字列です。 a.arrivalDateが日付型の場合、ソリューションは正常に動作します。 – mrd

+0

その場合、DateTime.Parse関数の1つを使用して、arrivalDateをDateTimeに変換します。 –

関連する問題