0

以下のテーブル構造を見つけてください。

Folderid                    parentFolderid              Guid
1                           0                           1234
2                           1                           5678
3                           2                           9012
4                           3                           87697
5                           7                           4443 

要件は、folderId を渡す場合、関数がすべての GUID を提供する必要があることです。

例:1関数に渡すと、最初の 4 つの Guid (親とその子) を取得する必要があります。次のようにすべての GUID を返す関数があります。

public List<Guid> Folders(int folderId)
{ 
    // To get the folderids based on parentfolderid
    var a = entity.Where(x => x.parentfolderId == folderId).FirstOrDefault();
     return a;

}

取得できる ID は 1 レベルまでです。

親、その子、孫を葉まで取得する方法はありますか?

4

2 に答える 2

0

そのテーブルをクラスに入れることができる場合は、これをチェックしてください。

public class Entity
{
    public int ID { get; set; }
    public int ParentID { get; set; }
    public string Name { get; set; }

    public static List<Entity> GetTree(int ID, List<Entity> ListToSearch, bool First = true)
    {
        List<Entity> FilteredEntities = new List<Entity>();

        FilteredEntities.AddRange(ListToSearch.Where<Entity>(x => x.ParentID == ID).ToList<Entity>());

        List<Entity> Temp = new List<Entity>();
        foreach (Entity current in FilteredEntities)
        {
            Temp.AddRange(GetTree(current.ID, ListToSearch, false));
        }

        FilteredEntities.AddRange(Temp);

        if (First)
        {
            FilteredEntities.Add(ListToSearch.Where<Entity>(x => x.ID == ID).Single<Entity>());
        }

        return FilteredEntities;
    }
}

使用法:

    List<Entity> filteredEntities = Entity.GetTree(1, entities);
    List<string> onlyTheNames = filteredEntities.Select<Entity, string>(x => x.Name).ToList<string>();

よろしく

于 2012-07-28T04:34:22.783 に答える
0

このノードクラスを使えば、こんなコードが書けます。

public class Folder
{
    public int Id { get; set; }
    public int? ParentId { get; set; }
    public Guid SomeGuid { get; set; }
}

そして、可能なものの例は次のとおりです。

var list = new List<Folder>
{
    new Folder {Id = 0, ParentId = null, SomeGuid = new Guid("0000b25b-8538-4b78-818a-9094507e0000") },
    new Folder {Id = 1, ParentId = 0, SomeGuid = new Guid("1000b25b-8538-4b78-818a-9094507e0001") },
    new Folder {Id = 2, ParentId = 1, SomeGuid = new Guid("2000b25b-8538-4b78-818a-9094507e0002") },
    new Folder {Id = 3, ParentId = 1, SomeGuid = new Guid("3000b25b-8538-4b78-818a-9094507e0003") },
    new Folder {Id = 4, ParentId = 2, SomeGuid = new Guid("4000b25b-8538-4b78-818a-9094507e0004") },
    new Folder {Id = 5, ParentId = 3, SomeGuid = new Guid("5000b25b-8538-4b78-818a-9094507e0005") },
    new Folder {Id = 6, ParentId = 0, SomeGuid = new Guid("6000b25b-8538-4b78-818a-9094507e0006") },
    new Folder {Id = 7, ParentId = 4, SomeGuid = new Guid("7000b25b-8538-4b78-818a-9094507e0007") },
    new Folder {Id = 8, ParentId = 3, SomeGuid = new Guid("8000b25b-8538-4b78-818a-9094507e0008") },
};
var rootNode = Node<Folder>.CreateTree(list, n => n.Id, n => n.ParentId).Single();

var firstChild = rootNode.Children.First(); // Id 1
var descendentsOfFirstChild = firstChild.Descendants; // All descendants of node 1
于 2015-02-23T21:15:10.733 に答える