C# LINQ 过滤器深层嵌套列表

Tan*_*uyB 1 .net c# linq .net-core

我有一个基于包含其他列表的列表的结构。我需要根据列表最深部分的属性值来过滤列表。

现在我正在这样做:

queryable = queryable
    .Include(x => x.Carriers)
    .ThenInclude(c => c.CarrierActions)
    .ThenInclude(ca => ca.Action)
    .ThenInclude(ac => ac.ActionFacts);

queryable = queryable
    .Where(x => x.Carriers.Any(
        carriers => carriers.CarrierActions.Any(
            carrieractions =>
                carrieractions.Action.ActionTypeId ==
                ActionTypeEnum.DosemeterCalculateDeepDose)));
Run Code Online (Sandbox Code Playgroud)

我加入所需的表,然后根据顶部列表下方 3 个级别的 ActionTypeId 来过滤它们。

首先,是否可以一步完成此操作(包括使用连接进行过滤),其次,第二部分不起作用,因为我的列表变空,但我确信该类型的操作会获取值。

顺便说一句,使用 .NET Core 2.0.3!

AAA*_*ddd 5

要回答你的第一部分,你可以这样做

queryable = queryable
    .Include(x => x.Carriers)
    .ThenInclude(c => c.CarrierActions)
    .ThenInclude(ca => ca.Action)
    .ThenInclude(ac => ac.ActionFacts)
    .Where(x => x.Carriers.Any(
        carriers => carriers.CarrierActions.Any(
            carrieractions =>
                carrieractions.Action.ActionTypeId ==
                ActionTypeEnum.DosemeterCalculateDeepDose)))
Run Code Online (Sandbox Code Playgroud)

对于你的第二部分,它应该可以工作,请检查你的数据,因为这非常简单