使用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没有按原样过滤结果。请告诉我我做错了什么。感谢。
答案 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;