У меня есть следующая структура.Как выбрать коллекцию в коллекции с помощью LINQ?
public class ToolSettings
{
public string Extension { get; set; }
public ObservableCollection<Tool> Tools { get; set; }
}
public class Tool
{
public string Name { get; set; }
public string Command { get set; }
}
// Within app code
public ObservableCollection<ToolSettings> settings { get; set; }
Я хотел бы взять коллекцию Tools из коллекции настроек, где Extension равно определенной строке.
Ниже мой код LINQ, но я получаю только один элемент в своей коллекции, когда знаю, что есть больше. Похоже, что он создает коллекцию коллекции, поэтому есть только один элемент.
myListBox.ItemsSource = from i in settings
where i.Extension == myExtension
select i.Tools;
EDIT:
Спасибо за все хорошие (и быстрые) ответы. Оказывается, мне нужен только первый элемент, но я знаю, что метод SelectMany пригодится в будущем. Итак, спасибо за все головы. Вот полное решение, которое я использовал.
myListBox.ItemsSource = (from i in settings
where i.Extension == myExtension
select i.Tools).First();
вам нужно перевернуть порядок метода звонки. – Shlomo
SelectMany следует переименовать в нечто более интуитивно понятное, это один из самых полезных элементов linq, с которым так много людей сталкиваются с трудностями при поиске, есть кто-то, спрашивающий, как это сделать, как 5 раз в день.Возможно, например, SelectFlatten или SelectRecursive заставят людей быстрее вытащить его из intellisense для этой цели. –