从对象列表返回成员IEnumerables的连接集

时间:2019-04-01 19:12:46

标签: c# .net linq

我有节点对象

public class Node {
 private Boolean isStart;
 private IEnumerable<int> memberIds;
}

在IEnumerable IEnumerable<Node>

并想要获取节点具有isStart = true的所有成员标识;

我当前的答案是:

public IEnumerable<int> GetStartingMembers(IEnumerable<node> nodeList) {
  IEnumerable<Node> startingNodes = nodeList.Where(n.isStartingNode == true);
  IEnumerable<int> startingMembers = new List<int>();
  foreach (var node in startingNodes) {
     startingMembers = startingMembers.Concat(node.memberIds);
  }
}

但这似乎太麻烦了-必须有更好的方法-有任何想法吗?

2 个答案:

答案 0 :(得分:4)

尝试

IEnumerable<int> startingMembers = nodeList.Where(n => n.isStartingNode)
    .SelectMany(x => x.memberIds)
    .ToList();

参考:SelectMany

答案 1 :(得分:1)

首先,您的代码示例无法编译:错误的成员名称,错误的类名称,错误的访问修饰符。但是,如果我们更改所有内容以编译您的代码,则结果将变为:

public IEnumerable<int> GetStartingMembers(IEnumerable<Node> nodeList) 
    => nodeList.Where(n => n.isStart == true).SelectMany(n => n.memberIds);

public class Node
{
    public Boolean isStart;
    public IEnumerable<int> memberIds;
}