[英]LINQ to Entities DateTime Compare
我在將LINQ中的日期與實體表達式進行比較時遇到問題。 我想檢查DateTime == DateTime - whole day
。
我想這樣做:
return context.Events.Any(x =>
x.UserId == id
&& x.Date >= date
&& x.Date < date.AddDays(1)
&& x.Type == EventType.StartWork);
問題是由於AddDays()方法,LINQ上面的查詢不正確。
我試過使用如下的DbFunction:
return context.Events.Any(x =>
x.UserId == id
&& x.Date >= date
&& x.Date < DbFunctions.AddDays(date, 1)
&& x.Type == EventType.StartWork);
還有這個:
return context.Events.Any(x =>
x.UserId == id
&& DbFunctions.TruncateTime(date.Date) == date.Date
&& x.Type == EventType.StartWork);
這些查詢都沒有給出預期的結果。
只需創建2個日期:
var datePlusOneDay = date.AddDays(1);
return context.Events.Any(x => x.UserId == id
&& x.Date >= date
&& x.Date < datePlusOneDay
&& x.Type == EventType.StartWork);
此外,我不確定,但問題可能是你的約會不僅有日期部分,還有時間部分。
因此,為了確保只選擇DateTime
變量的日期部分,您可以這樣做:
date = date.Date;
var datePlusOneDay = date.AddDays(1);
即使您無法在查詢之前初始化日期,使用System.Data.Entity.DbFunctions.DiffDays
另一種應該在Linq-To-Entities中工作的方式:
return context.Events
.Any(x => x.UserId == id && x.Date > date
&& System.Data.Entity.DbFunctions.DiffDays(x.Date, date) < 1
&& x.Type == EventType.StartWork);
你可以通過使用DbFunctions.TruncateTime實現你想要的,但只是在方程的兩邊 :
return context.Events.Any(x =>
x.UserId == id
&& DbFunctions.TruncateTime(x.Date) == DbFunctions.TruncateTime(date)
&& x.Type == EventType.StartWork);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.