我知道LINQ不能使用TimeSpan,但是我想在添加TimeSpan的DateTime上执行where条件。然而,我的问题是TimeSpan首先在查询中被引用。我曾尝试在内存中进行此操作,但这也会导致问题。
entiteis属于:
System.Data.Entity.IDbSet<CharterRequestDTO>
biddingToCloseIn定义为:
[NotMapped]
public TimeSpan BiddingToCloseIn
{
get { return TimeSpan.FromTicks(BiddingToCloseInTicks); }
set { BiddingToCloseInTicks = value.Ticks; }
}
正常:
var charterRequestDtoIds =
(from e in entities
where e.ClientId == clientId
&& e.Status != TrackingState.Void
&& DateTime.Now < e.CreatedAt.AddDays(30).Add(e.BiddingToCloseIn)
select e.Id);
记忆中:
var charterRequestDtoIds =
from e in entities.Where( e => e.ClientId == clientId
&& e.Status != TrackingState.Void
&& DateTime.Now < e.CreatedAt.AddDays(30).Add(e.BiddingToCloseIn) )
select e.Id;
两者都有错误:
System.NotSupportedException:LINQ to Entities无法识别 方法&#39; System.DateTime Add(System.TimeSpan)&#39;方法和这种方法 无法翻译成商店表达。
答案 0 :(得分:0)
不是添加TimeSpan
,而是根据您需要的精度添加毫秒(或秒,分钟)。
AddDays(30).AddMilliseconds(e.BiddingToCloseIn.TotalMilliseconds)