LINQ选择并连接分层模型的结果

时间:2012-10-04 08:32:19

标签: c# .net linq silverlight

我有以下模型,它代表一个两级菜单层次结构,我需要做的是从SubMenuItems子集合中选择一个ID然后连接其及其父记录TextToDisplay属性的结果

我的问题是如何返回单个父项和单个子项然后访问TextToDisplay属性?

我要查询的对象是ObserableCollection

public ObservableCollection<MenuModel> MenuItems { get; set; }

模型

public class MenuModel
{
    public int ID { get; set; }
    public string TextToDisplay { get; set; }
    public string ImageSource { get; set; }
    public ObservableCollection<MenuModel> SubMenuItems { get; set; }
}

1 个答案:

答案 0 :(得分:1)

使用Single()获取一个项目,Any()检查是否存在与查询匹配的列表元素:

int theIdYouWant = 30; //for example
var parentItem = MenuItems.Single(i => i.SubMenuItems.Any(si => si.Id == theIdYouWant));
var text = parentItem.TextToDisplay + 
    parentItem.SubMenuItems.Single(i => i.Id == theIdYouWant).TextToDisplay;

注意如果没有父项包含ID为30的子项,或者如果返回多个父项,则会抛出异常 - 因此您可能需要使用SingleOrDefault()来检查null,或Where然后选择您想要的项目。