将两个日期时间合并为一个,并在 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 中做到这一点
您可以使用实体框架日期和时间规范函数来实现此目的 - 如此处所列
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)