Не удается преобразовать тип IEnumerable в ObservableCollection. Вам не хватает приведения?

Я пытаюсь вернуть сущности, где логическое значение "isAssy" истинно:

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

но все утверждение подчеркнуто красным, в котором говорится, что я не могу «преобразовать тип IEnumerable в ObservableCollection... вам не хватает приведения?»


person Rachael    schedule 19.02.2013    source источник
comment
Отвечает ли это на ваш вопрос? Как преобразовать IEnumerable в ObservableCollection?   -  person StayOnTarget    schedule 23.02.2021


Ответы (2)


ObservableCollection<T> имеет перегруженный конструктор, который принимает IEnumerable<T> в качестве параметра. Предполагая, что ваш оператор Linq возвращает набор из MasterPartsList элементов:

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

        return new ObservableCollection<MasterPartsList>(enumerable); 
    }
}
person Robert Harvey    schedule 19.02.2013
comment
Спасибо! Не могу поверить, что я пропустил это. Отличное объяснение. - person Rachael; 20.02.2013

Вы должны явно создать ObservableCollection, что проще всего:

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

Это потенциально неэффективно, поскольку вы каждый раз создаете новую коллекцию. Однако это может быть самым простым решением, если вы каждый раз возвращаете совершенно разные наборы данных. В противном случае вам придется перебирать коллекцию, удаляя элементы, которых больше нет в возвращаемом наборе, и добавляя новые элементы.

person ChrisF    schedule 19.02.2013
comment
Я не знал. Какова моя альтернатива? Спасибо! - person Rachael; 20.02.2013
comment
@ UB3571 - я просто проверяю, но это зависит от вашего использования. - person ChrisF; 20.02.2013
comment
Это может стоить накладных расходов, если коллекция действительно должна быть наблюдаемой. - person Robert Harvey; 20.02.2013
comment
Я считаю, что коллекция должна быть наблюдаемой. Я привязываюсь к коллекции в ListBox, и свойства каждого элемента в коллекции должны быть полностью раскрыты/реализованы INotifyPropertyChanged - person Rachael; 20.02.2013