2

ObservableCollection<MainBusinessObject>を持つコレクション内のすべてのアイテムをフィルタリングする必要がある場所をフィルタリングしようとしていますSubobject.PropertyX == true

  MainBusinessObject 
     - PropertyA int
     - PropertyB string
     - ListOfSubobject ObservableCollection<Subobject>

  Subobject
     - PropertyX bool
     - PropertyY int
     - PropertyZ - string

ループと if ステートメントを避けたいのですが、LinQ ステートメントを正しく取得できないようです。これは私がこれまでに持っているものです:

return (MainBusinessObjectCollection) 
          listOfMainBusinessObject.Where(x =>
           (x as MainBusinessObject).CanBePartitioned == true);

編集ListOfSubobjectメインのビジネスオブジェクトから除外する 必要があります

4

2 に答える 2

4

ANY サブオブジェクトにそのプロパティを持たせるか、ALL サブオブジェクトにそのプロパティを持たせるかによって異なります。

var filteredList = listOfMainBusinessObject
                       .Where(x => x.ListOfSubobject.Any(s=>s.PropertyX));

また

var filteredList = listOfMainBusinessObject
                      .Where(x => x.ListOfSubobject.All(s=>s.PropertyX));

また、無効または不要と思われるキャストがいくつかあります。MainBusinessObjectCollection(それが s のコレクションであると仮定して)に変換するには、返さMainBusinessObjectれる から初期化する必要があるでしょう:IEnumerableWhere

var newList = new MainBusinessObjectCollection(filteredList);
于 2012-10-16T14:05:39.570 に答える
0

Subobjectsすべてが必要な場合Subobject.PropertyX == true

listOfMainBusinessObject.SelectMany(x => x.ListOfSubobject)
                        .Where(x => x.PropertyX == true);
于 2012-10-16T14:09:16.747 に答える