将两个日期时间合二为一,并在linq中使用它

时间:2013-09-19 14:08:18

标签: c# linq entity-framework

我有一个linq查询,需要结合datetimeA.date + DateitmB.time。怎么做?

var sample = (from e in dataContext.tblA.Include("tblB")
              where (e.Active == true && DateTime.Parse(e.DateA.ToShortDateString() + " " +e.DateB.ToShortTimeString()) >= DateTime.Now )
                        select new 
                        {
                        ...
                        }).ToList();

我尝试使用

new DateTime(e.DateA.Year, e.DateA.Month,e.DateA.Day,e.DateB.Hour,e.DateB.Minute,e.DateB.Second) >= DateTime.Now

但我不能在linq

中这样做

4 个答案:

答案 0 :(得分:1)

我猜你的查询没有被翻译成下层数据源(可能是SQL)。这就是你得到错误的原因。

您要从一个对象组合Date,从一个对象组合Time,然后将其与DateTime.Now进行比较,您可以尝试以下操作:

var sample = (from e in dataContext.tblA.Include("tblB")
              where e.Active == true 
                    && EntityFunctions.TruncateTime(e.DateA) >= DateTime.Today //Compare date part only
                    && EntityFunctions.CreateTime(e.DateB.Hour, e.DateB.Minutes, e.DateB.Seconds) >= DateTime.Now.TimeOfDay //Time part only
                        select new 
                        {
                        ...
                        }).ToList();

答案 1 :(得分:1)

使用DateTime.Date + DateTime.TimeOfDay将两者结合起来

// ...
  .Select(data => new{ combined = data.DateA.Date + data.DateB.TimeOfDay, data })
  .Where(x => x.data.Active && x.combined >= DateTime.Now)
// ...

答案 2 :(得分:1)

您可以使用实体框架日期和时间规范函数来实现此目的 - 如此处所列

http://msdn.microsoft.com/en-us/library/bb738563.aspx

对于您的具体示例 - 这样的事情可能有用。

var sample =
    (
        from e in dataContext.tblA.Include("tblB")
        where e.Active == true && System.Data.Objects.EntityFunctions.CreateDateTime(e.DateA.Year, e.DateA.Month,e.DateA.Day,e.DateB.Hour,e.DateB.Minute,e.DateB.Second) >= DateTime.Now
        select new 
        {
            ...
        }
    ).ToList();

答案 3 :(得分:0)

我会尝试这样的事情。也许在你的linq之前做它,如果它工作然后添加它或只是将它设置为变量,如果不是

DateA.Add(DateB.time)