我有节点对象
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);
}
}
但这似乎太麻烦了-必须有更好的方法-有任何想法吗?
答案 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;
}