C#比较日期和时间时间在Linq

时间:2011-08-29 09:37:51

标签: c# linq

使用linq,我想只返回那些日期&时间大于提供的日期。记录在字符串格式的不同列中具有日期和时间。 例如,“290811”(2011年8月29日)和“1400”(下午2点或14小时,取决于使用的上下文)。

我做了什么:

var result = from s in source
             where GetDateTime(s.date, s.time) >= myDateTime
             select s;

GetDateTime是我创建的函数,用于以DateTime格式返回日期和时间。 myDatetime是我通过的日期。

编辑:使用的功能:

public static DateTime GetDateTime(string strDate, string strTime) {
    DateTime dt;
    int dd = Convert.ToInt32(strDate.Substring(0, 2));
    int mm = Convert.ToInt32(strDate.Substring(2, 2));
    int yy = Convert.ToInt32("20" + strDate.Substring(4, 2));

    TimeSpan ts = GetTimeFromString(strTime);

    dt = new DateTime(yy, mm, dd, ts.Hours, ts.Minutes, 0);            

    return dt;
}

public static TimeSpan GetTimeFromString(string strTime) {
    int hh = Convert.ToInt32(strTime.Substring(0, 2));
    int mins = Convert.ToInt32(strTime.Substring(2, 2));        
    return new TimeSpan(hh, mins, 0);
}

示例数据:

Adt_avlStatus   7
Adt_BaseFare    100
Adt_breakPoint  Y
Adt_cabin       M
Adt_Discount    0
Adt_Farebasis   EAP14DN
Adt_fareType    RP
Adt_Markup      0
Adt_rbd     E
date        290811
time        1520
Origin      IXC
Destination     GOI

myDateTime示例:20/08/2011 17:35:00(20 / Aug / 2011 5:35 PM)

问题是上面的linq没有按原样过滤结果。请告诉我我做错了什么。感谢。

5 个答案:

答案 0 :(得分:1)

我认为,myDateTime也包含时间部分。如果我理解正确,您希望myDateTime仅包含日期部分。你可以验证这个: myDateTime包含时间部分,如果myDateTime != myDateTime.Date

答案 1 :(得分:0)

根据您的问题中可见的内容判断,错误是GetDateTime,s.date或s.time。你确定GetDateTime工作正常吗?

答案 2 :(得分:0)

如果它没有按原样过滤结果,那么您的GetDateTime()方法必定存在缺陷。

答案 3 :(得分:0)

如果没有数据,我们仍然只能推测。

问题是:

  • 来自GetDateTime的错误值,因为source的输入数据不是您期望的格式
  • myDateTime的值未设置或设置得太低,这意味着您的传入数据中的所有日期都大于

答案 4 :(得分:0)

var result = from s in source let dt = GetDateTime(s.date, s.time)
             where dt >= myDateTime
             select s;