在查询中首次引用TimeSpan的LINQ中处理TimeSpan
本文关键字:TimeSpan LINQ 处理 查询 引用 | 更新日期: 2023-09-27 17:59:01
我知道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不识别方法"System.DateTime Add(System.TimeSpan)"方法,以及此方法无法转换为存储表达式。
不添加TimeSpan
,而是添加毫秒(或秒、分钟,根据您需要的精度)
AddDays(30).AddMilliseconds(e.BiddingToCloseIn.TotalMilliseconds)