我有一个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
中这样做答案 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)