I have the following structure.
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; }
I'd like to grab the Tools collection from the settings collection where the Extension equals a certain string.
Below is my LINQ code, but I'm only getting one item in my collection when I know there's more. It looks like it produces a collection of a collection, which is why there's only one item.
myListBox.ItemsSource = from i in settings
where i.Extension == myExtension
select i.Tools;
EDIT:
Thanks for all the good (and quick) answers. It turns out I only need the first item, but I know that the SelectMany method will come in handy in the future. So, thanks for all the heads up. Here is the full solution I used.
myListBox.ItemsSource = (from i in settings
where i.Extension == myExtension
select i.Tools).First();
myListBox.ItemsSource = settings.Where(s => s.Extension == myExtension)
.SelectMany(s => s.Tools);
Or, if you prefer query syntax to the fluent syntax:
myListBox.ItemsSource = from s in settings
where (s.Extension == myExtension)
from t in s.Tools
select t;
That will give you an IEnumerable<ObservableCollection<Tool>>
. It willprobably only have one item in it, but that item will be a ObservableCollection. If you want that collection itself, tack .First()
(or .FirstOrDefault()
) at the end.
If i.Extension == myExtension
could find several ToolsSettings in the collection (I'm guessing not), then you will need to use .SelectMany()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With