0

私はこれに何が欠けているのかわかりません:私はEDMでこの関係を持っています-(まだ写真をロードできません)

Category_1_ _ many RecipeCategory_ many _ _1_Recipe

基本的に、すべてのレシピには1つ以上のカテゴリがあり、すべてのカテゴリには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;
            }
        }

    }

私が達成しようとしているのは、親ノードがカテゴリ名で、子ノードがレシピ名であるツリービューです。Linqを使用して、ベーステーブル(RecipeからRecipeCategory)からリレーショナルテーブルにドリルインする方法を知っています。カテゴリテーブルに再度移動する方法も必要です。また、カテゴリにレシピがない場合でも、ツリービューでカテゴリ名を親として表示したいことにも言及する必要があります。

4

1 に答える 1

1

このシナリオでの私の問題は、コードが機能していないことではないことがわかりました。むしろ、ツリービューアイテムをツリービューに追加することを怠ったのです。また、この追加はforeachループの後に実行する必要があります。リストカテゴリ=newList(); リストレシピ=newList(); 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);
        }
于 2012-12-22T23:52:42.317 に答える