[英]Using DateDiff in Entity Framework on a SQL CE database
我有一個方法應該返回一個匿名對象列表與計算列,如下所示:
var tomorrow = DateTime.Today.AddDays(1);
return from t in this.Events
where (t.StartTime >= DateTime.Today && t.StartTime < tomorrow && t.EndTime.HasValue)
select new
{
Client = t.Activity.Project.Customer.Name,
Project = t.Activity.Project.Name,
Task = t.Activity.Task.Name,
Rate = t.Activity.Rate.Name,
StartTime = t.StartTime,
EndTime = t.EndTime.Value,
Hours = (System.Data.Objects.SqlClient.SqlFunctions.DateDiff("m", t.StartTime, t.EndTime.Value) / 60),
Description = t.Activity.Description
};
不幸的是,我從DateDiff函數中得到以下錯誤:
類型為System.Data.Objects的指定方法'System.Nullable 1[System.Int32] DateDiff(System.String, System.Nullable
1 [System.DateTime],System.Nullable .1 [System.DateTime])' .SqlClient.SqlFunctions'無法轉換為LINQ to Entities存儲表達式 。
我在這里做錯了什么想法?
編輯:我也嘗試過這里提到的EntityFunctions類,但是這樣做不起作用。
Minutes = EntityFunctions.DiffMinutes(t.EndTime, t.StartTime),
[編輯]
Hours = (System.Data.Objects.SqlClient.SqlFunctions.DateDiff("mi", t.StartTime, t.EndTime.Value) / 60)
SQL CE不受支持。
Hours = ((TimeSpan)(t.EndTime.Value - t.StartTime)).TotalHours
拋出DbArithmeticExpression異常
所以,我認為你必須分兩步完成。 獲取所需的數據,然后計算內存中的時間差。
var events = (from t in context.Events
where (t.StartTime >= DateTime.Today && t.StartTime < tomorrow && t.EndTime.HasValue)
select t).ToArray();
return from t in events
select new
{
...
Hours = (t.EndTime.Value - t.StartTime).TotalHours
};
您要求EF提供程序處理SQL中的DATEDIFF,我認為在任何版本的SQL中都不可能。 使用本機DateTime函數:
var tomorrow = DateTime.Today.AddDays(1);
return from t in this.Events
where (t.StartTime >= DateTime.Today && t.StartTime < tomorrow && t.EndTime.HasValue)
select new
{
Client = t.Activity.Project.Customer.Name,
Project = t.Activity.Project.Name,
Task = t.Activity.Task.Name,
Rate = t.Activity.Rate.Name,
StartTime = t.StartTime,
EndTime = t.EndTime.Value,
Hours = t.EndTime.Value(t.StartTime.Subtract).Hours,
Description = t.Activity.Description
};
兩種可能性,從EndTime中刪除Value:
Hours = (System.Data.Objects.SqlClient.SqlFunctions.DateDiff("m", t.StartTime, t.EndTime) / 60)
或者使用DateDiffHour:
Hours = (System.Data.Objects.SqlClient.SqlFunctions.DateDiffHour(t.StartTime, t.EndTime)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.