我的数据库结构就像
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();
}
答案 0 :(得分:2)
这不是你问题的确切答案,但是:
如果您想要父/子关系,在数据库中您必须拥有这样的自我关系:
EF会产生这个:
使用PictureCategory1和PictureCategory2,您可以轻松访问项目的子项/父项。
答案 1 :(得分: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;
}
答案 2 :(得分: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;
}
答案 3 :(得分: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>
数据库中的最新数据