我有以下结构。如何使用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集合。
下面是我的LINQ代码,但我只知道我的集合中有一个项目,当我知道还有更多。它看起来像它产生一个集合的集合,这就是为什么只有一个项目。
myListBox.ItemsSource = from i in settings
where i.Extension == myExtension
select i.Tools;
编辑:
感谢所有的好(快速)的答案。事实证明,我只需要第一个项目,但我知道SelectMany方法将在未来派上用场。所以,感谢所有的领导。这是我使用的完整解决方案。
myListBox.ItemsSource = (from i in settings
where i.Extension == myExtension
select i.Tools).First();
你需要翻转方法的顺序调用。 – Shlomo 2010-08-17 14:32:15
SelectMany应该重新命名为更直观的东西,这是很多人难以找到的最有用的linq片段之一,有人问如何做到这一点像一天5次..也许像SelectFlatten或SelectRecursive会让人们更快地将它从intellisense中解脱出来。 – 2010-08-17 14:32:15