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>