2016-11-23 49 views
2

,我有以下功能LINQ在我的.net应用程序中DbFunctions.TruncateTime LINQ相当于ASP .NET CORE

public ActionResult Index() 
    { 
     Dictionary<DateTime?, List<Event>> result; 
     result = (from events in db.Events.Include("Activity") 
         where events.IsActive 
         group events by DbFunctions.TruncateTime(events.DateTimeFrom) into dateGroup 
         select new { EventDate = dateGroup.Key, Events = dateGroup.ToList() }).ToDictionary(x => x.EventDate, x => x.Events); 

     return View(result); 
    } 

当我使用这个在ASP .NET CORE,我不能使用DbFunctions。我怎样才能重写这个在Microsoft.EntityFrameworkCore中工作?如果这有所作为,我正在使用SQLite。

回答

3

对于EF Core,还不支持DbFunctions。但是,您可以使用“原始Sql查询”。

你可以找到"Raw Sql Queries" here

文档,你也可以跟踪here为DbFunctions为EF核心

+2

+100提供跟踪链接!现在我看到.NET 2.0的核心有EF.Functions。 –

7

在EF6 DbFunctions.TruncateTime是用来代替DateTime.Date财产因为某种原因不支持更高版本。

在EF Core中,不需要前者,因为DateTime.Date现在被正确识别和翻译。

group events by events.DateTimeFrom.Date into dateGroup 

不幸的是没有被支持哪些文件(还),所以作为一般的经验法则,经常尝试对应的CLR方法/属性(如果有的话),并检查是否将它转换为SQL以及如何。

0

我设法在Lambda中重写了它,并将其设置为异步。似乎工作是一样的。

var temp = await _context.Events.Where(x => x.IsActive) 
      .Include(a => a.Activity) 
      .GroupBy(x => x.DateTimeFrom.Date) 
      .Select(g => new { EventDate = g.Key, Events = g.ToList() }).ToDictionaryAsync(x => x.EventDate, x => x.Events);