C#LINQ过滤深层嵌套列表

时间:2017-12-14 08:43:27

标签: c# .net 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)));

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

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

使用.NET Core 2.0.3 btw!

1 个答案:

答案 0 :(得分:2)

要回答你的第一部分你可以做到这一点,也许是你的要求

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)))

对于你的第二部分,它应该正常工作,id检查你的数据,因为这是非常直接的前进