DbFunctions.TruncateTime LINQ等效于ASP .NET CORE

Tar*_*lba 12 linq sqlite entity-framework-core

我的.net应用程序中有以下功能LINQ

    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);
    }
Run Code Online (Sandbox Code Playgroud)

当我在ASP .NET CORE中使用它时,我不能使用DbFunctions.我如何重写它以使其在Microsoft.EntityFrameworkCore中工作?我正在使用SQLite,如果这有所作为.

Iva*_*oev 37

在EF6 DbFunctions.TruncateTime中使用而不是DateTime.Date属性,因为由于某种原因,后者不受支持.

在EF Core中,前者不需要简单,因为DateTime.Date现在可以正确识别和翻译.

group events by events.DateTimeFrom.Date into dateGroup
Run Code Online (Sandbox Code Playgroud)

遗憾的是,还没有支持的文档,所以作为一般的经验法则,总是尝试相应的CLR方法/属性(如果有的话)并检查它是否转换为SQL以及如何.


M.R*_*017 7

在 ASP.NET CORE 中使用 DbFunctions 您必须创建一个对象。

var DbF = Microsoft.EntityFrameworkCore.EF.Functions;
Run Code Online (Sandbox Code Playgroud)

现在您可以轻松使用它。

var now = DateTime.Now;

int count = db.Tbl.Count(w => DbF.DateDiffDay(now, w.RegisterDate) <= 3);
Run Code Online (Sandbox Code Playgroud)

github上的更多细节

  • 在 C# 中,将对象分配给变量如何导致它具有不同的方法/更改其可访问性? (2认同)

kiz*_*lsu 4

EF Core 尚不支持 DbFunction。但是您可以使用“原始 Sql 查询”。

您可以在此处找到“原始 Sql 查询”的文档

您还可以在此处跟踪EF Core 的 DbFunctions

  • +100 提供跟踪链接!,现在我看到 .NET Core 2.0 有 EF.Functions。 (4认同)