2016-07-27 5 views
0

LINQでTimeSpanを使用できないことを理解していますが、TimeSpanを追加してDateTimeにwhere条件を実行したいとします。しかし、私の問題は、TimeSpanがクエリ内で最初に参照されることです。私は記憶でそれをやってみたが、それも問題を引き起こす。TimeSpanが最初にクエリで参照されるLINQの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; 
両方のための3210

エラー:

System.NotSupportedException:LINQのエンティティへ 法「のSystem.DateTime(のSystem.TimeSpan)を追加」メソッド、および店舗の表現に変換することができません このメソッドを認識しません。

+0

BiddingToCloseInの値がどのように変化させましたか?残っている日数ですか?時間など? – MiltoxBeyond

+0

'BiddingToCloseIn'は' TimeSpan'ですか? – Jace

+0

はい入札はtimeSpanですが、奇妙な方法で割り当てられています。今すぐあなたの質問を更新します – RickyTamma

答えて

0

代わりのTimeSpanを追加して、ミリ秒を追加(または秒、分、あなたが必要とする精度に応じて。)

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

こんにちはこれは働いていただきありがとうございます。将来、この回答を読んでいる人にとっては、SQLはaddDaysを認識しないので、これはメモリ内のメソッドでのみ行うことができます – RickyTamma