如何让所有 child 达到特定级别,如 4X15 级别矩阵

How to get all child to specific levels like 4X15 level matrix

我有 4X15 这样的矩阵,我想找到 child 最多 15 个级别。就像我发送 parent id 2 那么它应该 return 从级别 1 到接下来的 15 个级别的所有 4 条记录

ID        Name        ParentId
1         A           0
2         B           1
3         C           1
4         D           2
5         E           2
6         F           1
7         G           1
8         H           3
9         I           4
10        J           5
11        K           3
.         .           .
.         .           .
100       XX          9
101       XA          10
 .         .           .
 .         .           .

因此,对于用户 2,它应该 return 最多 15 个级别的所有记录。 2 => (4,5,9,10,100,101) Level1 (4,5) Level2(9), Level3(10), Level4(100), Level5(101)

有什么方法可以在 LINQ 中找到它吗?

我用 LINQ 和递归函数得到了它的解决方案

public List<MyNetworkModel> FetchUserNetworkData(int userId)
    {
        List<MyNetworkModel> userNetwork = new List<MyNetworkModel>();
        int counter = 1;

        List<MyNetworkModel> level1 = (from t in _ctx.Users
                                       where t.ParentId == userId
                                       select new MyNetworkModel
                                       {
                                           Id = t.Id,
                                           ParentId = t.ParentId,
                                           SponsorId = t.SponsorId,
                                           Fullname = t.Fullname,
                                           DateOfJoining = t.DateOfJoining,
                                           PhoneNumber = t.PhoneNumber,
                                           IsTccReceived = t.IsTccReceived ? "Yes" : "No",
                                           TccWalletAddress = t.TccWalletAddress,
                                           Rank = t.Rank,
                                           Level = 1
                                       }).ToList();

        AddUsers(ref userNetwork, level1, counter);

        return userNetwork;
    }

private List<MyNetworkModel> AddUsers(ref List<MyNetworkModel> nestedUsers, List<MyNetworkModel> level, int counter)
    {
        foreach (var user in level)
        {
            nestedUsers.Add(user);
            GetChildren(user.Id, ref nestedUsers, counter);
        }

        return nestedUsers;
    }

private void GetChildren(int userId, ref List<MyNetworkModel> nestedUsers, int counter)
    {
        counter++;
        List<MyNetworkModel> nthLevel = (from t in _ctx.Users
                                       where t.ParentId == userId
                                       select new MyNetworkModel
                                       {
                                           Id = t.Id,
                                           ParentId = t.ParentId,
                                           SponsorId = t.SponsorId,
                                           Fullname = t.Fullname,
                                           DateOfJoining = t.DateOfJoining,
                                           PhoneNumber = t.PhoneNumber,
                                           IsTccReceived = t.IsTccReceived ? "Yes" : "No",
                                           TccWalletAddress = t.TccWalletAddress,
                                           Rank = t.Rank,
                                           Level = counter
                                       }).ToList();
        if (nthLevel != null && nthLevel.Any() && counter <= 15)
        {
            AddUsers(ref nestedUsers, nthLevel, counter);
        }
    }

现在只需调用 FetchUserNetworkData(1); 这将 return 最多 15 个级别的数据,并列出有多少用户处于哪个级别。