如何使用LINQ在集合中选择集合?

bsh*_*52s 2 c# linq binding

我有以下结构.

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; }
Run Code Online (Sandbox Code Playgroud)

我想从设置集合中获取Tools集合,其中Extension等于某个字符串.

下面是我的LINQ代码,但是当我知道还有更多时,我只收集了我的收藏中的一个项目.看起来它产生了一个集合的集合,这就是为什么只有一个项目.

myListBox.ItemsSource = from i in settings 
                        where i.Extension == myExtension 
                        select i.Tools;
Run Code Online (Sandbox Code Playgroud)

编辑:

感谢所有好的(和快速的)答案.事实证明我只需要第一个项目,但我知道SelectMany方法将来会派上用场.所以,感谢所有的提醒.这是我使用的完整解决方案.

myListBox.ItemsSource = (from i in settings 
                         where i.Extension == myExtension 
                         select i.Tools).First();
Run Code Online (Sandbox Code Playgroud)

Luk*_*keH 9

myListBox.ItemsSource = settings.Where(s => s.Extension == myExtension)
                                .SelectMany(s => s.Tools);
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢使用流利语法的查询语法:

myListBox.ItemsSource = from s in settings
                        where (s.Extension == myExtension)
                        from t in s.Tools
                        select t;
Run Code Online (Sandbox Code Playgroud)