2009-08-04 2 views
5

У меня есть List объектов, которые содержат массив строк в качестве одного из их свойств. Я хочу получить отдельный строковый массив, содержащий все значения.LINQ - выбор всех дочерних элементов из иерархии объектов

Мой объект выглядит следующим образом:

public class Zoo { 
    string Name { get; set;} 
    string[] Animals { get; set;} 
} 

Некоторые зоопарки могут иметь только одно животное, у некоторых может быть много. Каким будет самое простое выражение Лямбды или запрос LINQ, чтобы получить мне уникальный список всех животных во всех Зоопарках в List<Zoo>?

ответ

12
var query = zoos.SelectMany(zoo => zoo.Animals) 
       .Distinct(); 

Или если вы выражение запроса вентилятор (я не был бы что-то в этом простом):

var query = (from zoo in zoos 
      from animal in zoo.Animals 
      select animal).Distinct(); 
+0

Спасибо, Джон. Типично с моей стороны. –

+0

Где была типография? Я, должно быть, пропустил это :) –

+4

Опечатка была в моем приложении. Я не могу дождаться, когда добавится StackOverflow addin для Visual Studio, чтобы вы могли исправлять мои приложения во время работы. :-) –

Смежные вопросы