gpt4 book ai didi

linq-to-entities - ThenInclude 中的 Entifyframework 核心 2.0 过滤器

转载 作者:行者123 更新时间:2023-12-05 05:18:51 25 4
gpt4 key购买 nike

我正在使用 EF core 2.0 并想过滤子集合。谁能帮助我如何在 EF 核心 2.0 中执行此操作?

    var items = await _context.RiskType
.Include(r => r.Categories)
.ThenInclude(category => category.Alerts)
.ToListAsync();

在上面的代码中我想过滤category.Alerts.where(alert=>alert.caseId==1)

谢谢

最佳答案

正如其中一条评论中所说,这还不受支持。但是,您可以通过多种方式解决它。

首先,您可以 .Select() 将所需数据放入匿名或 DTO 对象中并使用它。请注意,在下面的示例代码中,.Include() 被 EF Core 忽略,因为存在 .Select() 方法。但是为了清楚起见,我喜欢使用它。

Parent[] parents = context.Parent
.Include(p => p.Children)
.Select(p => new
{
FilteredChildren = p.Children.Where(/*Filter Func for the children collection*/)
})
.ToArray();

另一种方法是为您需要的某个 Parent 显式加载实体。当您只需要为一些父项加载子项时,这是很好的,但是如果您有一个大集合并且想要加载所有子项,请记住显式加载需要访问数据库。在下面的代码示例中,您说您想要 .Load() a .Collection() 用于父条目,如果您想要过滤它,您必须使用 .Query() 以便您可以获得将用于获取的查询实体并使用 .Where() 方法应用过滤器。最后,您只需说 .Load() 即可将子实体加载到父实体中。如果您想对不是集合的导航属性使用显式加载,则必须使用 .Reference() 方法而不是 .Collection()。

Parent parent = context.Parents.Find(/*Key*/);

context.Entry(parent)
.Collection(p => p.Children)
.Query()
.Where(/*Filter Func for the children collection*/)
.Load()

我是 EF 的新手,如果有人有更多建议,我想看看。

关于linq-to-entities - ThenInclude 中的 Entifyframework 核心 2.0 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com