EF Core 5 - 筛选器上的扩展方法包括



我正在尝试在EF Core 5(预览版3(上尝试新的,很棒的,最终实现的"过滤包含"。

这段代码完美运行

var categoriesWithActiveProducts = await _context.Categories.Include(x => x.Products.Where(y => y.IsActive)).ToListAsync();

好吧,现在我想使用扩展方法来使代码更直观,所以

var categoriesWithActiveProducts = await _context.Categories.Include(x => x.Products.ActiveQueryFilter()).ToListAsync();
public static IEnumerable<Product> ActiveQueryFilter(this ICollection<Product> source)
{
return source.Where(x => x.IsActive).AsEnumerable();
}

但是我收到下面的错误

System.InvalidOperationException:表达式 'x.Products.ActiveQueryFilter((' 在 Include 操作中无效。表达式应表示属性访问:'t => t.MyProperty'。要针对在派生类型上声明的导航,请使用强制转换,例如 't => ((派生(t(。MyProperty"或"as"运算符,例如't =>(t as Derived(。我的财产'。可以通过撰写"位置"、"排序依据(降序(、然后按(降序(、跳过"或"采取"操作来筛选集合导航访问。有关包含相关数据的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=746393。

我该如何解决?

我不建议在 EF 查询中使用静态方法。文档解释了原因

基本上,它们会导致内存泄漏和意外行为

最新更新