-1

嗨,我的数据库结构就像

Id  ParentId    MenuName    URL
1   0           Home            google.com
2   1           Privacy         yahoo.com
3   0           About Us    gmail.com
4   0           Contact US  www.contactus.com
5   2           Disclaimer  www.disclaimer.com
6   4           FeedBack    www.feedback.com
7   3           What we do  www.whatwedo.com
8   3           How we do   www.howWeDo.com

我想获取基于 parentid 的数据。主要问题是数据可以是 N 级深。需要 C# 或 LINQ 中的解决方案

谢谢

到目前为止尝试过:

 public string getMenuItems(int parentId)
{

    using (dynamicMenuEntities context = new dynamicMenuEntities())
    {
        var menuObj = from r in context.Menus
                      where r.ParentId == parentId
                      select new { r.MenuName, r.URL, r.Id };


        foreach (var obj in menuObj)
        {
            sbMenu.Append("<li><a target=\"_blank\" href='" + Page.ResolveUrl(obj.URL) + "'>" + obj.MenuName + "</a></li>");
            int childCount = context.Menus.Count(ch => ch.ParentId == obj.Id);
            if (childCount > 0)
            {
                return getMenuItems(obj.Id);
            }
        }
        return sbMenu.ToString();


    }
4

4 回答 4

2

这不是您问题的确切答案,但是:

如果你想要父/子关系,在数据库中你必须有这样的自我关系:

在此处输入图像描述

EF 会生成这个:

在此处输入图像描述

通过 PictureCategory1 和 PictureCategory2,您可以轻松访问项目的子项/父项。

于 2013-10-18T11:54:50.230 回答
0

我在记事本中写了这个,我不测试它,但你可以做一些这样的想法:(你也可以使用 StringBuilder 代替字符串)

public string getMenuItems(int parentId)
{
    using (dynamicMenuEntities context = new dynamicMenuEntities())
    {
        string tags = new string();
        tags += "<ul>";

        var menuObj = from r in context.Menus
                      where r.ParentId == parentId
                      select new { r.MenuName, r.URL, r.Id };


        foreach (var obj in menuObj)
        {
            tags += "<li>";

            int childCount = context.Menus.Count(ch => ch.ParentId == obj.Id);
            if (childCount > 0)
            {
                tags += obj.MenuName;
                tags += getMenuItems(obj.Id);
            }
            else
            {
                tags += "<a target=\"_blank\" href='" + Page.ResolveUrl(obj.URL) + "'>" + obj.MenuName + "</a>";
            }

            tags += "</li>"
        }

        tags += "</ul>";

        return tags;
    }
于 2013-10-18T12:23:34.873 回答
0

假设您的实现中有一个名为 MenuItem 的实体,并且您正在使用实体框架。然后,

    List<MenuItem> GetMenuItemsByParentId(int parentId)
    {
    EntityContext newContext = new EntityContext();
    List<MenuItem> getMenuItems = newContext.MenuItems.Where(c => c.ParentId == parentId).ToList();
    newContext.Dispose();
    return getMenuItems;
    }
于 2013-10-18T11:40:25.433 回答
0

我几乎完成了。它正在搜索到第 n 级,唯一存在的问题是定位和

  • 标签。

     public string getMenuItems(int parentId)
    {
        using (dynamicMenuEntities context = new dynamicMenuEntities())
        {
            var menuObj = from r in context.Menus
                          where r.ParentId == parentId
                          select new { r.MenuName, r.URL, r.Id };
            foreach (var obj in menuObj)
            {
                sbMenu.Append("<li><a target=\"_blank\" href='" + Page.ResolveUrl(obj.URL) + "'>" + obj.MenuName + "</a>");
                childCount = context.Menus.Count(r => r.ParentId == obj.Id);
                if (childCount > 0)
                {
                    sbMenu.Append("<ul>");
                    getMenuItems(obj.Id);
                }
                else
                {
                    sbMenu.Append("</ul>");
                }
    
            }
    
        }
        return sbMenu.ToString();
    }
    

    HTML 输出(有问题联系我们)

    <ul id="menu"><li><a target="_blank" href='/Dynamic-HTML-Menu/www.home.com'>Home</a><ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.k.com'>Know about us</a></ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.about.com'>About</a><ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.whoweare.com'>Who we are</a></ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.contactus.com'>Contact US</a><ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.feedback.com'>FeedBack</a><ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.HellYa.com'>FeedBack2</a><ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.FeedBack3.com'>FeedBack3</a></ul><li><a target="_blank" href='/Dynamic-HTML-Menu/www.Contactus2.com'>Contact Us2</a></ul> </ul>
    

    数据库中的最新数据 在此处输入图像描述

  • 于 2013-10-18T12:49:54.143 回答