从DB获取平均日期时间并从另一个中减去一个日期

Fra*_*ier 5 c# linq entity-framework

  • 如何通过实体框架从Datetime字段获取平均时间?
  • 如何从另一个日期中减去一个日期?

我想的是:

ObjectQuery<Visit> visits = myentitys.Visits;
            var uQuery =
            from visit in visits
            group visit by visit.ArrivalTime.Value.Day into g
            select new
            {
                 Day = g.Key,
                 Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes)
            };
Run Code Online (Sandbox Code Playgroud)

获取按日分组的访客的平均停留时间.

Dav*_*fer 7

假设您的后备存储是SQL Server,请执行以下操作.顺便说一句,我纠正了我认为是一个拼写错误 - 你将一个总分钟数分配到一个名为Hours的字段中.为了未来的观众,我将该字段重命名为Minutes.

ObjectQuery<Visit> visits = myentitys.Visits;
var uQuery = from visit in visits
             group visit by visit.ArrivalTime.Value.Day into g
             select new
             {
                 Day = g.Key,
                 Minutes = g.Average(visit => System.Data.Objects.SqlClient.SqlFunctions.DateDiff("m", visit.LeaveTime.Value, visit.ArrivalTime.Value))
             };
Run Code Online (Sandbox Code Playgroud)

令人失望的是,LINQ to Entities不支持将DateTime减法内在转换为DateDiff,然后生成TimeSpan对象作为结果.


Mis*_* N. 1

我宁愿从数据库获取数据,然后在内存中执行平均函数。虽然我不确定会对性能产生什么影响......

            List<Visit> visits = myentitys.Visits.ToList();//Get the Visits entities you need in memory,
                                           //of course,you can filter it here
            var uQuery =
            from visit in visits
            group visit by visit.ArrivalTime.Value.Day into g
            select new
            {
                Day = g.Key,
                Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes)
            };
Run Code Online (Sandbox Code Playgroud)

这种算术运算不可能在 sql 查询中转换(如异常所示:DbArithmeticExpression 参数必须具有数字公共类型),但对于内存中的对象来说是可能的。

希望这可以帮助。