我正在尝试更新我的对象图中的一个项目,该项目可以跨越“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();
注意:有时类别在层次结构的深处可能为空。即,如果没有类别,则集合设置为空。此外,解决方案不一定需要使用 LINQ。