2016-11-23 82 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);