使用linq过滤掉不需要的对象

时间:2016-03-01 21:23:49

标签: c# linq c#-4.0

我在这个方法中写了这个linq查询,所以我可以过滤掉我的舰队中没有链接模块的任何船只(存储,生命支持,医疗舱等)。

如果提供的车队有任何带有链接模块的船舶

,则返回true
    public bool FleetWithShipsWithLinkedModules(Fleet fleet)
    {
        var linkedModules = fleet.Ships.Any(
                                        s => s != null &&
                                        s.Parts != null &&
                                        s.Parts.LinkedModules != null);

        return linkedModules;
    }

用法:

if (FleetWithShipsWithLinkedModules(fleet))
{
   ...do stuff
}

在数据库中,部件链接到Ships,而不是Fleets。它是Fleet>船舶>零件

大约50%的时间都有效,我无法弄明白为什么。我不确定我是否是linq或其他东西。

我希望有人可以查看linq查询,并告诉我它是否在结构和语法方面看起来不错。

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在检查集合,而您应该检查它们是否为空:

var linkedModules = fleet.Ships
                         .Any(s => s.Parts
                                    .Any(p => p.LinkedModules.Any());