1

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

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

有任何想法吗?

4

4 回答 4

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; 
于 2012-05-10T14:05:34.970 回答
2
var descriptions = db.Descriptions.Where(a => 
                     a.ID == 12 && 
                     a.arrivalDate >= Convert.ToDateTime("20110101000000") &&
                     a.arrivalDate <= Convert.ToDateTime("20110131000000"));
于 2012-05-10T13:59:54.337 回答
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; 
于 2012-05-10T14:02:14.583 回答
1

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

于 2012-05-10T13:59:47.160 回答