我有一个这样的类结构:
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/