【问题标题】:Dynamic LINQ date query performance动态 LINQ 日期查询性能
【发布时间】:2018-02-19 08:23:32
【问题描述】:

我正在使用System.Linq.Dynamic.Core 库在我的项目中生成查询。我得到了一个日期字符串,我想做与此等效的动态:

db.EntityName
    .Where(x => x.StartDate > DateTime.ParseExact("02/19/2018", "MM/dd/yyyy", CultureInfo.InvariantCulture))

我发现下面的这个查询有效:

db.EntityName
    .Where($"x => x.StartDate.ToFileTime() > { DateTime.ParseExact("02/19/2018", "MM/dd/yyyy", CultureInfo.InvariantCulture).ToFileTime() }")

这是正确的方法吗?它在StartDate 上执行转换,所以我不确定这是否会导致性能不佳。这可以吗?或者有更好的方法吗?

【问题讨论】:

    标签: c# entity-framework linq entity-framework-core


    【解决方案1】:

    这不是一个好主意。 EF 不知道如何将ToFileTime() 转换为SQL 查询,因此它只会查询整个表并在客户端的内存中执行您的Where。正确的做法是使用参数:

    db.EntityName
        .Where($"x => x.StartDate > @0", DateTime.ParseExact("02/19/2018", "MM/dd/yyyy", CultureInfo.InvariantCulture));
    

    @0 表示列表中的第一个参数,我们为其传递解析的DateTime 对象。

    如果您不确定是否对性能不利 - 启用 EF 日志记录并查看生成了哪些 SQL 查询。

    【讨论】:

    • 这样好多了,非常感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多