2016-03-01 3 views
0

Я написал этот запрос linq в этом методе, чтобы я мог отфильтровать любые корабли моего флота, у которых нет связанного модуля (хранилище, поддержка жизни, медицинский отсек и т. Д.).с помощью linq для отфильтровывания нежелательных объектов

Это возвращает истину, если предоставленный флот имеет какое-либо судно с связанными модулями

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 
} 

В базе данных, части связаны с судами, не флота. Это идет Флот> Корабли> Части

Это работает около 50% времени, и я не могу понять, почему. Я не уверен, что я это linq или что-то еще.

Я надеялся, что кто-то может взглянуть на запрос linq и сообщить мне, выглядит ли он конструктивно и синтаксически.

Спасибо!

+1

Вы понимаете, что вы на самом деле не отфильтровывая кораблей здесь? Вы просто проверяете, имеют ли * любые * корабли в вашем парке части со связанными модулями. – Blorgbeard

+1

Что такое тип данных связанных модулей? Это коллекция или отдельный объект? – Gurpreet

ответ

2

Вы нулевая проверка коллекции, в то время как вы должны проверить, действительно ли вы они пусты:

var linkedModules = fleet.Ships 
         .Any(s => s.Parts 
            .Any(p => p.LinkedModules.Any()); 
Смежные вопросы