在LINQ中处理TimeSpan,其中TimeSpan首次在查询中引用

时间:2016-07-27 01:22:40

标签: c# sql linq

我知道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;方法和这种方法   无法翻译成商店表达。

1 个答案:

答案 0 :(得分:0)

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

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