Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为下面的数据编写递归方法_C#_Asp.net_Recursion - Fatal编程技术网

C# 如何为下面的数据编写递归方法

C# 如何为下面的数据编写递归方法,c#,asp.net,recursion,C#,Asp.net,Recursion,嗨,我的数据库结构像 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.discla

嗨,我的数据库结构像

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();


    }

假设您的实现中有一个名为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;
    }

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

若要建立父/子关系,则在数据库中必须具有如下自我关系:

EF将生成以下内容:


使用PictureCategory1和PictureCategory2,您可以轻松访问项目的儿童/家长。

我将其写在记事本中,不进行测试,但您可以这样做: 也可以使用StringBuilder而不是string

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;
    }

我差不多做完了。它正在搜索到第n级,唯一存在的问题是和标签的定位

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>
数据库中的最新数据

问题中更新了如果我是你,对于这种类型的数据,我会得到全部数据,然后使用递归LINQ函数将其排序为对象。例如,这个对象下可以有一个IEnumerable,您可以使用递归方法填充它的子对象Hi Daniel这就是我要问的如何编写递归方法???
<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>