【问题标题】:Find number of recently added database rows in Asp.Net Entity Framework在 Asp.Net Entity Framework 中查找最近添加的数据库行数
【发布时间】:2020-07-05 23:03:05
【问题描述】:

我正在尝试在我的网站上创建一个统计页面,显示过去 X 分钟内特定表中添加了多少行。

这是我尝试的第一件事:

int games = db.GameLogs.Where(t => t.GameEnded > DateTime.Now - TimeSpan.FromMinutes(1)).Count();

我收到这个丑陋的错误:

这是我尝试的第二件事:

var games = db.GameLogs.FromSqlRaw("select count(*) from mtgbattles.gamelogs  where gameended > now() - interval 1 minute");

我得到错误:

InvalidOperationException:“FromSql”操作的结果中不存在所需的列“Id”。

查询在 MySQL Workbench 中运行良好。

【问题讨论】:

    标签: c# entity-framework asp.net-core entity-framework-core


    【解决方案1】:

    尝试将日期计算移出请求:

    var dt = DateTime.Now.AddMinutes(-1); // maybe `DateTime.UtcNow`
    int games = db.GameLogs
        .Where(t => t.GameEnded > dt)
        .Count();
    

    至于FromSqlRaw - 目前它有一些limitations,包括:

    • SQL 查询必须返回实体类型的所有属性的数据。

    因此,您的 select 语句应包含 GameLogs 的所有字段,以使 FromSqlRaw 工作。

    【讨论】:

    • 一般来说,将函数放在流畅的 EF sql 调用中似乎总是会导致问题。这是它第二次咬我。您的建议很有效,谢谢。
    • @JohnShedletsky 很乐意提供帮助。还有SqlServerDbFunctionsExtensions.DateDiffMinute,但我认为它们不适用于 MySQL)
    • MS 需要重新考虑他们的 SQL Server 许可情况。我必须使用 dumpster SQL,因为 MSSQL 成本为 15k/core。作为股东,我想这很好。但这不是把握未来的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多