这是我的第一个问题,很抱歉我的语言表达能力不够好。
我有一个像这个模型的表格:
public class Menu
{
[Key]
public int ID {get;set;}
public int ParentID {get;set;}
public string MenuName {get;set;}
public int OrderNo {get;set;}
public bool isDisplayInMenu {get;set;} // Menu or just for Access Authority
}
还有很多关于菜单的行,类似这样:
ID ParentID MenuName Order
--- --------- ------------- ------
1 0 Main.1 1 >> if ParentID==0 is Root
2 1 Sub.1.1 1
3 2 Sub.1.2 2
4 0 Main.2 2
5 4 Sub.2.1 1
6 4 Sub.2.2 2
我需要准备一个菜单树的二级分类。
public class MyMenu:Menu
{
public List<MyMenu> Childs { get;set;}
}
我需要一个Linq查询来获取类似这样的结果:
var result = (...linq..).ToList<MyMenu>();
我正在使用递归函数获取子菜单,但是这需要太长的时间才能得到结果。
有什么办法可以在一次查询中获取所有菜单树的句子吗?
更新:
我想将主菜单存储在一个表中。这个表将用于用户访问权限控制。有些行将显示在菜单中,有些行将仅用于获取访问权限。
在这种情况下,我需要多次获取表格树。表格树将被创建为过滤后的用户权限。当获取树时,将其存储在会话中。但是,许多会话意味着更多的RAM占用。如果有快速获取菜单树的方法,则不需要存储在会话中。
ParentID
为int?
,且根项目为null
而不是0
),则可以使用类似于此链接中的内容。否则,您必须执行多个查询。主要问题是您是否需要整个树还是基于某些条件的子树。因此,请澄清您的要求并展示您已经完成的工作。 - Ivan Stoev