2 回答

TA贡献1845条经验 获得超8个赞
您可以按 _Issue 分组并写入控制台,如下所示
var results = nList.GroupBy(x=>x._Issue);
Console.WriteLine("Group By _Issue");
foreach(var item in results)
{
Console.WriteLine(item.Key);
var IpString = string.Join(" ",item.ToList().Select(x=> $"{x._HostIp} {x._ProtoPort}"));
Console.WriteLine(IpString);
Console.WriteLine();
}
输出
Group By _Issue
Check 1
192.168.0.2 TCP_80 192.168.0.5 TCP_80 192.168.0.7 TCP_80
Check 2
192.168.0.3 TCP_81 192.168.0.4 TCP_82
Check 5
192.168.0.6 TCP_443

TA贡献1829条经验 获得超7个赞
可能有更好的方法来做到这一点,但这有效:
List<NContainer> nList = new List<NContainer>();
nList.Add(new NContainer { _HostFqdn = "ab1.corp.com", _HostIp = "192.168.0.2", _Severity = 1, _Issue = "Check 1", _ProtoPort = "TCP_80" });
nList.Add(new NContainer { _HostFqdn = "ab2.corp.com", _HostIp = "192.168.0.3", _Severity = 2, _Issue = "Check 2", _ProtoPort = "TCP_81" });
nList.Add(new NContainer { _HostFqdn = "ab3.corp.com", _HostIp = "192.168.0.4", _Severity = 1, _Issue = "Check 2", _ProtoPort = "TCP_82" });
nList.Add(new NContainer { _HostFqdn = "ab4.corp.com", _HostIp = "192.168.0.5", _Severity = 3, _Issue = "Check 1", _ProtoPort = "TCP_80" });
nList.Add(new NContainer { _HostFqdn = "ab5.corp.com", _HostIp = "192.168.0.6", _Severity = 3, _Issue = "Check 5", _ProtoPort = "TCP_443" });
nList.Add(new NContainer { _HostFqdn = "ab6.corp.com", _HostIp = "192.168.0.7", _Severity = 4, _Issue = "Check 1", _ProtoPort = "TCP_80" });
IEnumerable<NContainer> query = from NContainer vulns in nList
orderby vulns._Issue
where vulns._Severity >= 1
select vulns;
Console.WriteLine("Group by _Issue");
var prevIssue = "";
bool first = true;
foreach (var vuln in query)
{
if (prevIssue != vuln._Issue)
{
if (first)
first = false;
else
Console.WriteLine("\n");
Console.WriteLine("\t{0}", vuln._Issue);
Console.Write("\t");
prevIssue = vuln._Issue;
}
Console.Write("{0} {1} ", vuln._HostIp, vuln._ProtoPort);
}
基本上使用 Console.Write 而不是 WriteLine 以便您可以循环并将特定信息的所有 IP 信息附加到同一行。其余的只是格式化。
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报