我想检索数据并将其显示在已排序的(子项下面的父项)中 这样定义的数据项:ID |标题| Parent-ID
我所做的是首先检索所有项目然后排序 使用linq有更好的方法吗?
protected void Page_Load(object sender, EventArgs e)
{
List<Category> list2 = new List<Category>();
ContModel modeltx = new ContModel();
var ret = modeltx.Categories.ToList();
GetCategoryList(0, 0, ret, list2);
string str="";
foreach (Category cat in list2)
{
str=str+cat.Title+"\n";
TextBox1.Text = str;
}
}
private void GetCategoryList(int iCurID, int iDepth, List<Category> li, List<Category> newList)
{
Category tmp;
string strOffset = "";
foreach (Category cat in li)
{
if ((cat.ParentId) == iCurID)
{
for (int i = 1; i <= iDepth; i++)
strOffset = strOffset + "-";
strOffset = strOffset + cat.Title;
tmp = cat;
tmp.Title = strOffset;
newList.Add(tmp);
strOffset = "";
GetCategoryList(cat.CategoryID, iDepth + 1, li, newList);
}
}
}
更新
如果数据大小很大并且我想使用分页怎么办?
在排序之前我不能Page(.Skip(PageSize * PageIndex).Take(PageSize)
)...
答案 0 :(得分:1)
答案 1 :(得分:0)
我担心你必须在你的代码中对LINQ结果进行递归。根据表的大小和结构,您可能希望将整个表下拉到内存中(就像您正在做的那样)并在那里执行层次结构。如果您有一个非常大的表,您可能想要重复访问数据库。
有关详细信息,请阅读这篇精彩的文章: Storing Hierarchical Data in a Database
你的代码已经在内存中扁平化了。我建议在Skip(pSize * pIndex).Take(pSize)
对象(包含展平的)数据上使用list2
。请注意,这可能会导致层次结构深入分页。