现有一产品表,表中字段为:
ProductID CategoriesID
产品ID 类别ID另有一个产品类别表:
CategoriesID ParentID
类别ID 父级类别ID我现在需要获取最顶层的类别ID,如何获取?
最顶层的类别的ParentID为0我是这样写的,但获得结果不对! /// <summary>
/// 根据产品ID获取其所属的顶层产品类目ID
/// </summary>
/// <param name="ProductID">产品ID</param>
/// <returns></returns>
private int GetTopCategoriesIDByProductID(int ProductID)
{
M_Products model = BLLFactory.CreateProductBLL().GetDetail(ProductID);
return GetTopCategoriesID(model.CategoriesID);
} /// <summary>
/// 获取顶层产品类目ID
/// </summary>
/// <param name="iChildCategoriesID"></param>
/// <returns></returns>
private int GetTopCategoriesID(int iTopCategoriesID)
{
M_Categories model = BLLFactory.CreateCategoriesBLL().GetDetail(iTopCategoriesID); int iCategoriesID = 0; if (model.ParentID == 0)
iCategoriesID = model.CategoriesID;
else
GetTopCategoriesID(model.ParentID); return iCategoriesID;
}
ProductID CategoriesID
产品ID 类别ID另有一个产品类别表:
CategoriesID ParentID
类别ID 父级类别ID我现在需要获取最顶层的类别ID,如何获取?
最顶层的类别的ParentID为0我是这样写的,但获得结果不对! /// <summary>
/// 根据产品ID获取其所属的顶层产品类目ID
/// </summary>
/// <param name="ProductID">产品ID</param>
/// <returns></returns>
private int GetTopCategoriesIDByProductID(int ProductID)
{
M_Products model = BLLFactory.CreateProductBLL().GetDetail(ProductID);
return GetTopCategoriesID(model.CategoriesID);
} /// <summary>
/// 获取顶层产品类目ID
/// </summary>
/// <param name="iChildCategoriesID"></param>
/// <returns></returns>
private int GetTopCategoriesID(int iTopCategoriesID)
{
M_Categories model = BLLFactory.CreateCategoriesBLL().GetDetail(iTopCategoriesID); int iCategoriesID = 0; if (model.ParentID == 0)
iCategoriesID = model.CategoriesID;
else
GetTopCategoriesID(model.ParentID); return iCategoriesID;
}
解决方案 »
- for循环的代码 我的有问题 麻烦高手看看
- 如何将winform代码改成webform代码?
- 使用了ajax组件asp:ScriptManager,asp:UpdatePanel后台运行Response.Write中的js无效。
- gridview 与 formview
- 在线统计asp.net
- insert '+@bm+'(name) value(@lm)请教各位错在那?
- “Visual Studio .NET 已检测到指定的 Web 服务器运行的不是 ASP.NET 1.1 版...”
- 高手帮看看错在那里呀,急呀!
- 再问:如何用后台代码cs控制FreeTextBox工具栏上的按扭(如加粗)?
- Server端的类似客户端的<INPUT type="hidden">隐藏控件怎么得到?
- form的发送地点(action)有几种类型?
- 请教SQLDataSource问题
public static IEnumerable<ICategoryInfo> GetNavigation(IEnumerable<ICategoryInfo> categories, int categoryId)
{
IList<ICategoryInfo> list = new List<ICategoryInfo>();
int loop = 0;
int currentId = categoryId; ICategoryInfo category; while (loop < 10)
{
loop++;
var tmp = categories.Where(c => c.CategoryId == currentId); if (tmp.Count() < 1)
{
break;
}
else
{
category = tmp.First();
list.Add(category); if (category.ParentId > 0)
{
currentId = category.ParentId;
}
else
{
break;
}
}
}
return list.Reverse();
} public static IEnumerable<T> GetNavigation<T>(IEnumerable<T> categories, int categoryId)
{
if (typeof(T).GetInterfaces().Contains(typeof(ICategoryInfo)))
{
var list = categories.Cast<ICategoryInfo>();
return GetNavigation(list, categoryId).Cast<T>();
}
return null;
}
/// <summary>
/// 获取顶层产品类目ID
/// </summary>
/// <param name="iChildCategoriesID"></param>
/// <returns></returns>
private int GetTopCategoriesID(int iTopCategoriesID)
{
M_Categories model = BLLFactory.CreateCategoriesBLL().GetDetail(iTopCategoriesID); int iCategoriesID = 0; if (model.ParentID == 0)
iCategoriesID = model.CategoriesID;
else
iCategoriesID = GetTopCategoriesID(model.ParentID); // <-- 错在这里,返回值被丢弃了 return iCategoriesID;
}一般不建议使用递归
递归过深,将会造成栈溢出异常(StackOverflowException)
某些新手在使用递归时,没有正确地判断递归的返回条件造成应用程序崩溃。
递归的运行效率很低。所以,能使用其它方法替代的时候就尽量避免使用递归。
另外 我之前一直就是用while循环做 如5楼说 递归确实是把双刃剑 while的话 写不好也容易死 呵呵 坐等高人出现
title sortid parentid sortpath
公司 1 0 0,1,
技术部 2 1 0,1,2
项目组 3 2 0,1,2,3