DataTable cataloguess = catalogue.CatalogueChirMedTech(id);
我有Categorie对象,我可以在Categorie其他Categorie对象(List)下面和它下面。我也可以有其他类别对象等(递归)。 所以在c#中,我想创建每个Categorie及其类别列表(如果存在),并且其modeles.Modele是具有estterminal =' o'的行。 pereid = -256的行是父级,子级是pereid的行是父级的id(typeid)。
public class Categorie {
private List<Categorie> sousCategoriesField;
private List<Modele> modelesField;
public List<Categorie> Categories {
get {
return this.sousCategoriesField;
}
set {
this.sousCategoriesField = value;
}
}
public List<typeModele> modeles {
get {
return this.modelesField;
}
set {
this.modelesField = value;
}
}
}
感谢。
答案 0 :(得分:0)
首先我怀疑你的Categorie
对象需要某种标识符。简单的事情:
public int ID { get; set; }
递归部分应该足够简单。从逻辑上讲,方法可能如下所示:
private List<Categorie> GetCategories(int ID, DataTable sourceData)
{
var result = GetCategoriesFromData(ID, sourceData);
foreach (var categorie in result)
categorie.Categories = GetCategories(categorie.ID, sourceData);
return result;
}
当然,您需要在此处展开占位符GetCategoriesFromData
。这完全取决于你和递归本身的范围。基本上,您要查询DataTable
的具有给定ID作为其父项的行,将这些行转换为Categorie
个对象(填充ID
和modeles
,无论那些是),并返回该列表。
但是一旦你有了这个结构,递归就很简单了。您需要做的就是用最初的“魔术数字”为顶级父“类别”调用它:
DataTable cataloguess = catalogue.CatalogueChirMedTech(id);
var categories = GetCategories(-256, cataloguess);
然后GetCategories
方法将递归填充子类别,在每个递归级别传递每个“父”的ID
。