2015-07-27 7 views
3

Я не уверен, как правильно сформулировать вопрос, поэтому я не смог его найти. Пожалуйста, обратите внимание на следующие классы:Условия могут быть неправильными: LINQ Выберите, что вернет весь промежуточный объект на основе дочернего подтипа

public class Parent 
{ 
    public int ID { get; set; } 
    public List<Child> Children { get; set; } 
} 

public class Child 
{ 
    public int ID { get; set; } 
    public List<subChild> subChildren { get; set;} 
} 

public class subChild 
{ 
    public int ID { get; set; } 
    public string Type { get; set;} 
} 

Я хочу LINQ запрос возвращает список всех родителей, которые имеют по крайней мере один ляющих> subchild определенного типа, но не обязательно там, где они только имеют subchild из этот тип.

например:

Parent A 
    - Child Xa 
    - subchild 1a type="foo" 
    - subchild 2a type = "bar" 
    - Child Ya 
    - subchild 1a type="foo" 
Parent B 
    - Child Xb 
    - subchild 1b type = "foo" 
Parent C 
    - Child Xc 
    - subChild 1c type = "Bar" 

Это где я получил (Ошибочный Моя версия компилируется, дело не в этом.)

Parents.Children.SelectMany(s => s.Subchildren).where(x => x.Type="Foo").Tolist(); 

Моя реальная реализация немного отличается, и, может быть, мой псевдо код будет работать так, как я хочу, но я хочу, чтобы родительские и B вернулись, если я искал subChild.type = «Foo».

ответ

0

Вы можете использовать Any:

Parents.Where(p => p.Children.Any(
    c => c.Subchildren.Any(s => s.Type == "Foo"))).ToList(); 

Не забывайте, что для проверки равенства, необходимо == вместо =.

Чтобы получить список всех subchildren, вам нужно что-то вроде

Parents.SelectMany(p => p.Children).SelectMany(c => c.Subchildren) 
    .Where(s => s.Type == "Foo").ToList(); 
+0

Я пропустил шаг от моей реальной жизни, как это было бы Родитель -> Ребенок -> subchild -> subSubChild. Если бы я хотел вернуть всех подчимеров в их собственный список, независимо от родителей и детей? Редактировать: извините, редактировалось, и 5 минут приурочен. – MooseManCA

+0

Знаешь что? Я должен сделать работу с ног здесь. Я могу понять это. Спасибо за помощь! – MooseManCA

+0

Да, открытие самого себя, вероятно, лучше. Вы узнаете от этого намного больше. Я уже опубликовал ответ. – Glorfindel