2012-05-10 98 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存儲爲字符串?除此之外,你可以簡單地做同樣的事情。我會編輯我的答案。 –

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函數之一將arrivalDate轉換爲DateTime。 –