我正在使用vb.net :(
我有2个列表集合,我想返回第3个集合,其中成员i 1集合不存在于另一个集合中.
所以,例如我有这个基本的类对象
Class Person
Public Property FirstName As String
End Class
Run Code Online (Sandbox Code Playgroud)
我现在创建2个列表:
Dim l1 As List(Of Person) = New List(Of Person)()
Dim l2 As List(Of Person) = New List(Of Person)()
Dim p1 As Person = New Person()
p1.FirstName = "andy"
l1.Add(p1)
Dim p2 As Person = New Person()
p2.FirstName = "john"
l1.Add(p2)
Dim p3 As Person = New Person()
p3.FirstName = "david"
l2.Add(p3)
Dim p4 As Person = New Person()
p4.FirstName = "john"
l2.Add(p4)
Run Code Online (Sandbox Code Playgroud)
我想要的是获得这些条目的新列表:
andy
david
Run Code Online (Sandbox Code Playgroud)
到目前为止我有这个:
Dim newList = From c1 In l1, c2In l2
Where c2.FirstName <> c1.FirstName
Select c1.FirstName
Run Code Online (Sandbox Code Playgroud)
这给了我:
andy
andy
john
Run Code Online (Sandbox Code Playgroud)
我承认我的linq很棒....
一种简单的方法是使用All扩展方法:
Dim newList = From c1 In l1
Where l2.All(Function(c2) c2.FirstName <> c1.FirstName)
Select c1.FirstName
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是使用Except扩展方法:
Dim newList=l1.Select(Function(c1) c1.FirstName).Except(l2.Select(Function(c2) c2.FirstName));
Run Code Online (Sandbox Code Playgroud)
我现在注意到你想要两个列表中的独占元素.您可以连接两个名称列表并稍后应用a GroupBy以仅获取一次出现的名称:
Dim newList=l1.Select(Function(c1) c1.FirstName).Concat(l2.Select(Function(c2) c2.FirstName))
.GroupBy(Function(c) c)
.Where(Function(g) g.Count()=1)
.Select(Function(g) g.Key);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |