在实体框架中计算datetime对象的时间差给出错误
本文关键字:时间差 出错 错误 对象 datetime 实体 框架 计算 | 更新日期: 2023-09-27 17:54:28
我正在尝试计算两个日期之间的时差,并希望获得我的日期的日期名称。
举例:4/7/2016
- 周一
- :
这是我的班级:
public class Attendance
{
public int Id { get; set; }
public Nullable<System.DateTime> StartDateTime { get; set; }
public Nullable<System.DateTime> EndDateTime { get; set; }
}
当我尝试这样做时:
var query = (from t in context.Attendance
select new
{
timeDiff=t.EndDateTime.Value.Subtract(t.StartDateTime.Value).TotalHours,
Day=System.StartDateTime.ToString("dddd");
}).tolist();
误差LINQ to Entities不能识别方法System。时间间隔减去(System.DateTime)'方法,此方法不能翻译成存储表达式
我不想这样做:
var query = (from t in context.Attendance.toList().
select new
{
timeDiff=t.EndDateTime.Value.Subtract(t.StartDateTime.Value).TotalHours,
Day=System.StartDateTime.ToString("dddd");
}).tolist();
我有Datetime
的格式像这样存储在我的表中,所以我想要的输出如下所示的差异字段:
startDatetime Enddatetime Difference
----------------------------------------------------------------
2016-06-29 15:52:32.360 2016-06-29 15:52:36.970 00:00:04
2016-06-29 15:53:32.360 2016-06-29 15:55:36.970 00:2:00
2016-06-29 15:53:32.360 2016-06-29 16:55:36.970 01:02:00
您不能在EF查询中使用。net框架特定的方法,除非为它们定义了规范函数。但是,对于您的特定查询,有:
试题:
var query = (from t in context.Attendance
select new
{
TimeDiff=SqlFunctions.DateDiff("hour",t.StartDateTime, t.EndDateTime),
Day=SqlFunctions.DateName("weekday", t.StartDateTime);
}).ToList();
更新在你的问题中反映所需输出的变化:
var query = (from t in context.Attendance
select new
{
StartDate = t.StartDateTime,
EndDate = t.EndDateTime,
TimeDiff=SqlFunctions.DateDiff("second",t.StartDateTime, t.EndDateTime),
}).ToList();
然后你可以这样写:
foreach(var q in query)
{
Console.Write($"{q.StartDate:d} {q.EndDate:d} {TimeSpan.FromSeconds(q.TimeDiff):c}");
}