オブジェクト グラフ内のアイテムを更新しようとしていますが、これは深さが 'n' レベルに及ぶ可能性があります。
以下は私のオブジェクトモデルです:
public class Entity
{
public string Name { get; set; }
}
public class Category : Entity
{
public List<Category> Categories { get; set; }
public List<Product> Products { get; set; }
}
public class Product : Entity
{
}
私のビューは にバインドされていObservableCollection<Category> Categories
ます。私がやりたいのは、カテゴリ名を指定することです。コレクションからそれに一致する最初のオブジェクトを取得する必要があります。
たとえば、このようなリストとフェイシャル ティッシュ カテゴリがある場合、コレクションからフェイシャル ティッシュ カテゴリ オブジェクトを取得する必要があります。
Category - Pharmacy
|-Product - Aspirin
|-Product - Tylenol
|-Category - Tooth Paste
| |-Product - Crest
| |-Product - Colgate
|-Category - Paper Products
|-Category - Toilet Paper
| |-Product - NoName
| |-Product - Charmin
|-Category - Facial Tissue
|-Product - Kleenex
Category - Household
|-Product - Pinesol Cleaner
|-Product - Garbage Bags
私はこれを試しましたが、階層でレベル > 2 を検索すると、オブジェクト例外のインスタンスに設定されていないオブジェクト参照がスローされます。
return Categories.FirstOrDefault(n => n.Name == name) ??
Categories.SelectMany(node => node.Categories).Where(lx => lx.Name == name).FirstOrDefault();
注:場合によっては、カテゴリが階層の奥深くで null になることがあります。つまり、カテゴリがない場合、コレクションは null に設定されます。また、ソリューションで必ずしも LINQ を使用する必要はありません。