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

本文关键字:LINQ 并在 一个 两个 日期 时间 合并 | 更新日期: 2023-09-27 18:31:54

我有一个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 中做到这一点

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

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

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();

使用 DateTime.Date + DateTime.TimeOfDay 将两者组合在一起

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

我想您的查询没有被转换为正在铺设的数据源(可能是 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();

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

DateA.Add(DateB.time)