在查询中首次引用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的LINQ中处理TimeSpan

不添加TimeSpan,而是添加毫秒(或秒、分钟,根据您需要的精度)

AddDays(30).AddMilliseconds(e.BiddingToCloseIn.TotalMilliseconds)