C#比较日期和;林克时间

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是我创建的一

使用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
示例:
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格式返回了应该返回的日期和时间。