我有一个这样的类结构:

class Group
{
    public List<Group> SubGroups {get; set;}
    public List<Rule> Rules {get; set; }
}

class Rule
{
}


一个实例示例将是这样的:

Group 1
    SubGroup 1
        Rule 1
        Rule 2
    Rule 3
    Rule 5
Group 2
    SubGroup 2
        SubGroup 3
            Rule 7
            Rule 8
    Rule 6


有什么方法可以使用LINQ查询获取所有规则的列表,还是必须创建一些递归方法?

最佳答案

我认为您不能仅使用LINQ(无递归)来做到这一点。您可以使用助手。像这样:

public static IEnumerable<Rule> GetRules(Group group)
{
    foreach (var rule in group.Rules)
        yield return rule;
    if (group.SubGroups != null)
        foreach (var rule in group.SubGroups.SelectMany(g => GetRules(g)))
            yield return rule;
}


或更具有LINQ风格:

public static IEnumerable<Rule> GetRules(Group group)
{
     if (group.SubGroups != null)
         return group.Rules.Concat(group.SubGroups.SelectMany(g => GetRules(g)));
     else
         return group.Rules;
}

关于c# - 如何为此数据结构编写linq查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33426046/

10-12 17:19