如何在c#中进行递归选择?

时间:2017-12-14 13:16:57

标签: c# sql-server-2008

我将这个选择从数据库中检索到c#中的数据表中。 enter image description here

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;
        }
    }




}

感谢。

1 个答案:

答案 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个对象(填充IDmodeles,无论那些是),并返回该列表。

但是一旦你有了这个结构,递归就很简单了。您需要做的就是用最初的“魔术数字”为顶级父“类别”调用它:

DataTable cataloguess = catalogue.CatalogueChirMedTech(id);
var categories = GetCategories(-256, cataloguess);

然后GetCategories方法将递归填充子类别,在每个递归级别传递每个“父”的ID