Linq选择日期+ 1的时间

时间:2013-02-05 09:19:37

标签: c# linq

在我的SQL 2008 R2中,我有这个表:

enter image description here

我创建了LINQ语法来选择大于计算机小时的所有小时:

 public IList<LS_CLIENTHORRAIRE> Get_All_Obj(string CLIENT_ID)
        {
            try
            {
                IList<LS_CLIENTHORRAIRE> LesListe;
                using (Soft8Exp_ClientEntities oEntite_T = new Soft8Exp_ClientEntities())
                {
                    int The_Hour = DateTime.Now.Hour;
                    var query = from o in oEntite_T.LS_CLIENTHORRAIRE where o.CLIENT_ID == CLIENT_ID && o.HORRAIRE > new TimeSpan(The_Hour, 00/*minutes*/, 00/*seconds*/) select o;
                    LesListe = query.ToList();
                }
                return LesListe;
            }
            catch (Exception excThrown)
            {
                throw new Exception("Err_02", excThrown);
            }
        }

并且工作正常:

  • 当小时计算机为08:00时,它会返回12:0019:00
  • 当小时计算机为13:00时,它会返回19:00

但现在我想改变看日期的程序:

  • 当小时计算机为08:00时,它会返回12:0019:00以及05:00
  • 当小时计算机为13:00时,它会返回19:0005:00
  • 当小时计算机为20:00时,它会返回05:00

有什么想法吗?

我试过这样:

 DateTime The_Date = DateTime.Now.Date;
                    var query = from o in oEntite_T.LS_CLIENTHORRAIRE where o.CLIENT_ID == CLIENT_ID && The_Date.Add(o.HORRAIRE) > DateTime.Now select o;
                    LesListe = query.ToList(

);

但遗憾的是它不起作用

1 个答案:

答案 0 :(得分:1)

var query = oEntite_T.LS_CLIENTHORRAIRE
                .Where(o => o.CLIENT_ID == CLIENT_ID &&
                      (o.HORRAIRE > DateTime.Now.TimeOfDay || 
                       o.HORRAIRE.Hours == 5));

这会使方法表现得像你想的那样。虽然我不明白,为什么你想要5:00返回,即使它实际上小于DateTime.Now = 13:00

我认为你的表缺少日期信息,这会使逻辑失效。