EF Core 5.0,其中谓词在存储在变量中时被忽略



在更新到EF Core 5.0之后,我注意到了长时间运行的查询。也许我发现了EF Core 5.0的错误,但也许这是我在这里没有发现的突破性变化https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/breaking-changes.

我有一个函数;其中";谓词作为参数,所以这是我无法轻易重写的内容。

有效的代码:

var reps = ctx.Reports.AsNoTracking()
.Include(r => r.ReportColumns)
.Where(r => r.Name == "ListOfCustomers")
.ToList();

并生成正确的查询(包含WHERE子句(:

SELECT [r].[ReportID], [r].[AdvancedFilterPurpose] -- ommited columns
FROM [report].[Reports] AS [r]
LEFT JOIN [report].[ReportColumns] AS [r0] ON [r].[ReportID] = [r0].[ReportID]
WHERE [r].[Name] = N'ListOfCustomers'
ORDER BY [r].[ReportID], [r0].[ReportColumnID]

不起作用的代码:

Func<Db.Model.Report, bool> a = (r) => r.Name == "ListOfCustomers";
var reps = ctx.Reports.AsNoTracking()
.Include(r => r.ReportColumns)
.Where(a)
.ToList();

并生成不带WHERE子句的查询

SELECT [r].[ReportID], [r].[AdvancedFilterPurpose] -- ommited columns  
FROM [report].[Reports] AS [r]
LEFT JOIN [report].[ReportColumns] AS [r0] ON [r].[ReportID] = [r0].[ReportID]
ORDER BY [r].[ReportID], [r0].[ReportColumnID]

谢谢你的建议。

替换类型Func<Db。模型报告,bool>通过表达式<Func<Db。模型报告,bool>gt;。

这不起作用:Func<Db.Model.Report, bool> a = (r) => r.Name == "ListOfCustomers"

这将起作用:Expression<Func<Db.Model.Report, bool>> a = (r) => r.Name == "ListOfCustomers"

最新更新