我有这个Linq语句在LinqPad中运行(使用Linq to SQL),但是当我使用EF 6将它带入我的C#应用程序时,我收到一个错误,说cd.LogTimestamp.Date(在GroupBy语句中)不受支持。我正在尝试按日期将datetime2值转换为group的日期值。
helper.GetDbContext().SiteLog
.Where( sl => sl.SiteId == 3 )
.GroupBy( cd => new { cd.SiteId, cd.LogTimestamp.Date } )
.Select( g => new DailyTraffic()
{
SiteId = g.Key.SiteId,
TrafficDate = g.Key.Date,
NewUsers = g.Count( row => row.IsNewUser ),
ReturningUsers = g.Count( row => row.IsReturningUser ),
TotalUsers = g.Count( row => row.IsNewUser ) + g.Count( row => row.IsReturningUser ),
PageViews = g.Count( row => row.IsPageView )
} )
.OrderBy( g => g.SiteId ).ThenBy( g => g.TrafficDate )
.ToList();
是否有一种在EF 6中将datetime2
值转换为date
值的首选方法
答案 0 :(得分:2)
使用此质量检查(how to use entity framework to group by date not date with time)作为指南,您将要使用EntityFunctions
,以便您可以直接使用内置SQL Server功能,这当然意味着您的应用赢得了#39; t可以立即移植到其他数据库。
.GroupBy( cd => new { cd.SiteId, EntityFunctions.TruncateTime( cd.LogTimestamp ) } )