C#比较日期和;林克时间
使用linq,我只想返回那些日期和时间大于提供日期的记录。该记录以字符串格式在不同的列中包含日期和时间。 例如,“290811”表示(2011年8月29日)和“1400”表示(下午2点或14小时,取决于使用的上下文) 我所做的:C#比较日期和;林克时间,c#,linq,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是我创建的一
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
示例:2011年8月20日17:35:00
(2011年8月20日下午5:35)
问题在于,上面的linq并没有像它应该的那样过滤结果。请告诉我我做错了什么。谢谢。根据您的问题中可见的内容判断,错误是GetDateTime、s.date或s.time。您确定GetDateTime工作正常吗?根据问题中的可见内容判断,错误是GetDateTime、s.date或s.time。你确定GetDateTime工作正常吗?我想,
myDateTime
也包含一个时间部分。如果我理解正确,您希望myDateTime
只包含日期部分。您可以验证这一点:
myDateTime
包含时间部分,如果myDateTime!=myDateTime.Date
我假设,myDateTime
也包含一个时间部分。如果我理解正确,您希望myDateTime
只包含日期部分。您可以验证这一点:
myDateTime
包含时间部分,如果myDateTime!=myDateTime.Date
如果它没有按应有的方式过滤结果,那么你的GetDateTime()
方法肯定有缺陷。如果它没有按应有的方式过滤结果,那么你的GetDateTime()
方法肯定有缺陷。没有数据,我们仍然只能推测
问题在于:
- 从
返回的值不正确,因为来自GetDateTime
的输入数据的格式不是您期望的格式source
的值未设置或设置得太低,这意味着传入数据中的所有日期都大于该值myDateTime
- 从
返回的值不正确,因为来自GetDateTime
的输入数据的格式不是您期望的格式source
的值未设置或设置得太低,这意味着传入数据中的所有日期都大于该值myDateTime
- 没有这些数据,我们仍然只能推测
问题在于:
var result = from s in source let dt = GetDateTime(s.date, s.time)
where dt >= myDateTime
select s;
试一试
向我们展示
GetDateTime()
的实现。在不知道自己在做什么的情况下,您希望如何帮助您?GetDateTime
函数已添加。源是否来自数据库?如果是这样,我怀疑问题在于提供程序无法将“GetDateTime(…)”转换为SQL。你得到了什么错误?@Galloway,没有错误,它将返回所有未经过滤的结果。Source是一个对象的列表。向我们展示GetDateTime()
的实现。在不知道自己在做什么的情况下,您希望如何帮助您?GetDateTime
函数已添加。Source是否是来自数据库的IQueryable?如果是这样,我怀疑问题在于提供程序无法将“GetDateTime(…)”转换为SQL。你得到了什么错误?@Galloway,没有错误,它将返回所有未经过滤的结果。源是对象的列表。是myDateTime
也包含时间。另外,我想同时使用日期和时间进行比较。是的,时间对于比较很重要。是myDateTime
也包含时间。另外,我想同时使用日期和时间进行比较。是的,时间对于比较来说很重要。是的,我已经调试了代码,并且GetDateTime
以DateTime格式返回了应该返回的日期和时间。是的,我已经调试了代码,并且GetDateTime
以DateTime格式返回了应该返回的日期和时间。