有两个集合:
NodesWithCircuitsDown<NetworkDeviceNodeStatus>
和RecordedImpairedNodes<NetworkDeviceNodeStatus>
。
NetworkDeviceNodeStatus
有NodeId
(int)和CurrentStatus
(枚举)。
我想创建一个名为NodesWithDifferentImpairment
的第三个集合,其中包含NetworkDeviceNodeStatus
的{{1}}个NodeId
集合,但上面有两个集合,但CurrentStatus
表示{不同。
以下是我目前的情况,但是我无法嵌套查询来完成此任务。
IEnumerable<NetworkDeviceNodeStatus> NodesWithDifferentImpairment =
NodesWithCircuitsDown.Where(x =>
RecordedImpairedNodes.Select(y => new { y.CurrentStatus, y.NodeId }).Select(y => y.NodeId)
);
答案 0 :(得分:3)
试试这个
NodesWithCircuitsDown.Join(RecordedImpairedNodes,
node => node.NodeId,
node => node.NodeId,
(leftNode, rightNode) => new { LeftNode = leftNode, RightNode = rightNode }).
Where(pair => pair.LeftNode.CurrentStatus != pair.RightNode.CurrentStatus);
通过连接NodeId属性上的两个集合来获取具有不同状态的节点对,提取这些对并过滤那些具有不同状态的节点。
答案 1 :(得分:2)
您必须加入它们然后过滤:
var NodesWithDifferentImpairment = from nwcd in NodesWithCircuitsDown
join rin in RecordedImpairedNodes on nwcd.NodId equals rin.NodeId
where rin.CurrentStatus != nwcd.CurrentStatus
select new NetworkDeviceNodeStatus
{
CurrentStatus = rin.CurrentStatus,
NodeId = rin.NodeId
};