Fra*_*ier 5 c# linq entity-framework
我想的是:
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)
获取按日分组的访客的平均停留时间.
假设您的后备存储是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对象作为结果.
我宁愿从数据库获取数据,然后在内存中执行平均函数。虽然我不确定会对性能产生什么影响......
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 参数必须具有数字公共类型),但对于内存中的对象来说是可能的。
希望这可以帮助。