Linq比较字符串日期

时间:2012-05-10 13:57:25

标签: c# linq

我想比较日期的字符串。我正在尝试跟随linq查询,但我得到的运算符可以应用于string类型的字符串操作数。

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

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

您无法将DateTime变量与String变量进行比较。

所以你需要先创建一个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; 

答案 1 :(得分:2)

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

答案 2 :(得分: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; 

答案 3 :(得分:1)

字符串类不会覆盖&gt; =或&lt; =。您需要使用静态String.Compare(string,string)方法。