LINQ动态日期查询性能

4

我在项目中使用 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进行了转换,我不确定这是否会导致性能问题。这样做可以吗?还是有更好的方法?

1个回答

4

这不是一个好主意。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 查询。


太好了,非常感谢您的建议。 - Guerrilla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接