興味深い-ここであなたが求めていることは少し混乱しています。
インプレースでフィルタリングする方法を質問されていると思います。Offersもしそうなら:
IEnumerable<T>List<T>は不変であり(可変性を取得するには、コンクリートなどにキャストする必要があります) 、プロパティを変更OffersするIEnumerable<T>ことは期待できません。列挙するときにソースをフィルタリングする列挙可能オブジェクトを返します。Offers.Where(o => !o.IsSealed));Offers
代わりにあなたはします
var offerList = this.GetOfferList(id)
offerList.Offers = offerList.Offers.Where(o => !o.IsSealed));
ただし、これにより、そのインスタンスOffersを共有する他のコードの元の参照が非表示になることに注意してください。OfferListまた、列挙を開始するまで、実際にはフィルタリングも行いません。しかし、それはしばしば望ましいことです。そこで実行したい場合は、-を使用する.ToArray()か.ToList()、最後にWhere列挙を強制的に実行します。
より良いアプローチはOfferList、新しい列挙可能なオンデマンドを返すクラスのプロパティまたはメソッドを持つことです。
public IEnumerable<Offer> UnsealedOffers {
get {
return Offers.Where(o => !o.IsSealed);
}
}
そうすれば、列挙可能なマスターを破壊することはありません。
このコードはOffersnull(a NullReferenceException)の影響を受けやすく、 nullの列挙可能なものを返すのは良くないことに注意してください(代わりに空の列挙可能なものを返します)-したがって、Offersnullになる可能性がある場合は、それが起こらないようにします。または使用:
return (Offers ?? Enumerable.Empty<Offer>()).Where(o => !o.IsSealed);