【发布时间】:2021-07-27 09:32:44
【问题描述】:
我有以下对象列表:
ConnectionType = ConnectionType.COM
ComPort = "com1"
TcpPort = null
ConnectionName = "CONN0"
ConnectionType = ConnectionType.COM
ComPort = "COM1"
TcpPort = null
ConnectionName = "CONN1"
ConnectionType = ConnectionType.COM
ComPort = "COM1"
TcpPort = null
ConnectionName = "CONN2"
ConnectionType = ConnectionType.COM
ComPort = "COM2"
TcpPort = null
ConnectionName = "CONN3"
ConnectionType = ConnectionType.IP
ComPort = null
TcpPort = 1234
ConnectionName = "CONN4"
ConnectionType = ConnectionType.IP
ComPort = null
TcpPort = 1234
ConnectionName = "CONN5"
ConnectionType = ConnectionType.IP
ComPort = null
TcpPort = 4321
ConnectionName = "CONN6"
每个对象中使用的类型:
private int? tcpPort;
private string comPort;
private string connectionName;
private ConnectionType connectionType;
什么 LINQ 查询会返回每个 ConnectionType 的重复项的查找/字典?结果应包括每个副本的 ComPort/TcpPort 和 ConnectionName。对于 ComPort,查询也应该匹配忽略大小写的字符串。
到目前为止,我已经能够通过以下查询检索到一些理想的结果:
var duplicates = myList
.GroupBy(x => new { x.ComPort, x.TcpPort }).
.Where(m => m.Key != null && m.Skip(1).Any());
返回以下内容:
{ ComPort = COM1, TcpPort = }
CONN1
CONN2
{ ComPort = , TcpPort = 1234 }
CONN4
CONN5
但是结果输出应该如下所示:
COM1
CONN0
CONN1
CONN2
1234
CONN4
CONN5
【问题讨论】:
-
您在列表中使用了哪些类型?
-
听起来像是您喜欢执行的分组操作。见:docs.microsoft.com/en-us/dotnet/csharp/linq/group-query-results
-
请edit您的问题提供minimal reproducible example。
-
@JohnathanBarclay 我已经用每个对象中使用的类型更新了问题。
-
怎么样:
myList.GroupBy(x => x.TcpPort?.ToString() ?? x.ComPort)
标签: c# .net linq duplicates