2

我有一个 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

4 回答 4

2

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

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();
于 2013-09-19T14:34:47.283 回答
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();
于 2013-09-19T14:16:21.757 回答
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)
// ...
于 2013-09-19T14:16:56.670 回答
0

我会尝试这样的事情。也许在你的 linq 之前做它,如果它有效,则将其添加或将其设置为一个变量,如果不是

DateA.Add(DateB.time)
于 2013-09-19T14:14:03.420 回答