WPF Treeview使用linq实体多个关系

时间:2012-12-22 03:50:37

标签: c# linq-to-entities treeview wpf-controls

我不知道我对此缺少什么: 我在EDM中有这种关系 - (无法加载图片)

Category_1_ _ 许多 RecipeCategory_ 许多 _ _1_Recipe

基本上每个食谱都有一个或多个类别,每个类别可以有0个或更多个食谱

这是我的代码:

private void LoadData()

    {
        List<Category> Categories = new List<Category>();
        List<Recipe> Recipes = new List<Recipe>();
        var ctx = new MaWEntities();
        var query = from x in ctx.Categories select x;

        Categories = query.ToList<Category>();
        foreach (Category c in Categories)
        {
            TreeViewItem TVP = new TreeViewItem() { Header = c.CategoryName.ToString() };

            var qq = from xx in ctx.RecipeCategories.Where(o => o.CategoryId == c.CategoryId) select xx;
            foreach (var rc in qq)
            {

                TreeViewItem TVC = new TreeViewItem() { Header = rc.Recipe.RecipeName.ToString() };
                TVP.Items.Add(TVC);
                //TVP.IsExpanded = true;
            }
        }

    }

我想要完成的是一个树视图,其父节点是categoryname,子节点是食谱名称。我知道如何使用Linq从基表(Recipe到RecipeCategory)钻入关系表。还必须有一种方法再次遍历到Category表。我还要提一下,即使类别没有任何食谱,我仍然希望在树视图中看到类别名称作为父类。

1 个答案:

答案 0 :(得分:1)

我发现我在这种情况下的问题不是我的代码不能正常工作;相反,我忽略了将树视图项添加到我的树视图中。此外,这种添加需要在foreach循环之后完成。 List Categories = new List();             List Recipes = new List();             var ctx = new MaWEntities();             var query = from x in ctx.Categories select x;

        Categories = query.ToList<Category>();
        foreach (Category c in Categories)
        {
            TreeViewItem TVP = new TreeViewItem() { Header = c.CategoryName.ToString() };

            var query2 = from xx in ctx.RecipeCategories.Where(o => o.CategoryId == c.CategoryId) select xx;
            foreach (var rc in query2)
            {

                TreeViewItem TVC = new TreeViewItem() { Header = rc.Recipe.RecipeName.ToString() };
                TVP.Items.Add(TVC);

            }
            tvwRecipe.Items.Add(TVP);
        }