3

I'm trying to return entities where the bool "isAssy" is true:

 public ObservableCollection<MasterPartsList> ParentAssemblyBOM
 {
      get {return this._parentAssemblyBOM.Where(parent => parent.isAssy == true); }
 }

but the entire statement is underlined in red stating that I cannot "convert type IEnumerable to ObservableCollection...are you missing a cast?"

Robert Harvey
  • 178,213
  • 47
  • 333
  • 501
Rachael
  • 1,965
  • 4
  • 29
  • 55
  • Does this answer your question? [How to convert IEnumerable to ObservableCollection?](https://stackoverflow.com/questions/3559821/how-to-convert-ienumerable-to-observablecollection) – StayOnTarget Feb 23 '21 at 17:11

2 Answers2

10

ObservableCollection<T> has an overloaded constructor that accepts an IEnumerable<T> as a parameter. Assuming that your Linq statement returns a collection of MasterPartsList items:

public ObservableCollection<MasterPartsList> ParentAssemblyBOM
{
    get 
    {
        var enumerable = this._parentAssemblyBOM
                             .Where(parent => parent.isAssy == true);

        return new ObservableCollection<MasterPartsList>(enumerable); 
    }
}
Robert Harvey
  • 178,213
  • 47
  • 333
  • 501
1

You have to explicitly create the ObservableCollection which at it's most simplest is:

public ObservableCollection<MasterPartsList> ParentAssemblyBOM
{
    get {return new ObservableCollection<MasterPartsList>(this._parentAssemblyBOM.Where(parent => parent.isAssy == true)); }
}

This is potentially inefficient as you are creating new collection every time. However, this might be the simplest solution if you are returning a radically different set of data each time. Otherwise you have to loop through the collection removing items that are no longer in the return set and adding new items.

ChrisF
  • 134,786
  • 31
  • 255
  • 325