In an ICollection(of T) you have a contains method to see if your collection has the requested element in it. But if you want to look for Multiple elements, you have to resort to making predicates (and we all know how ugly those get).

So why didn’t MS implement ContainsAny (OR) and/or ContainsAll (AND). I couldn’t think of a good reason, so I made them myself. They are perhaps a bit over easy and not very performance friendly but they work.

Here are the extension methods.

<Extension()> _
    Public Function ContainsAny(Of T)(ByVal collection As ICollection(Of T), ByVal Parameters As ICollection(Of T)) As Boolean
        For Each parameter In Parameters
            If collection.Contains(parameter) Then
                Return True
            End If
        Next
        Return False
    End Function

    <Extension()> _
    Public Function ContainsAll(Of T)(ByVal collection As ICollection(Of T), ByVal Parameters As ICollection(Of T)) As Boolean
        For Each parameter In Parameters
            If Not collection.Contains(parameter) Then
                Return False
            End If
        Next
        Return True
    End Function```
They are generic, so you can use them in most places.

Here is an example how it works.

```vbnet
Imports System.Runtime.CompilerServices
Imports System.Net.NetworkInformation

Module Module1

    Sub Main()
        ShowNetworkInterfaces()
        Console.ReadLine()
    End Sub

    Public Sub ShowNetworkInterfaces()
        Dim computerProperties As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties()
        Dim nics As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
        If nics Is Nothing OrElse nics.Length < 1 Then
            Console.WriteLine("  No network interfaces found.")
            Exit Sub
        End If
        For Each adapter As NetworkInterface In nics
            Dim properties As IPInterfaceProperties = adapter.GetIPProperties()
            Console.WriteLine(adapter.Name)
            For Each ip As System.Net.IPAddress In properties.DnsAddresses
                Console.WriteLine("DNS server : {0}", ip.ToString)
            Next
        Next
        Dim _list As New List(Of System.Net.IPAddress)
        _list.Add(New System.Net.IPAddress(New Byte() {192, 168, 1, 2}))
        _list.Add(New System.Net.IPAddress(New Byte() {192, 168, 1, 3}))
        Dim result = From n In nics Where n.GetIPProperties.DnsAddresses.ContainsAny(_list)
        Console.WriteLine(result.Count)
        result = From n In nics Where n.GetIPProperties.DnsAddresses.ContainsAll(_list)
        Console.WriteLine(result.Count)
        Console.WriteLine()
    End Sub

    <Extension()> _
    Public Function ContainsAny(Of T)(ByVal collection As ICollection(Of T), ByVal Parameters As ICollection(Of T)) As Boolean
        For Each parameter In Parameters
            If collection.Contains(parameter) Then
                Return True
            End If
        Next
        Return False
    End Function

    <Extension()> _
    Public Function ContainsAll(Of T)(ByVal collection As ICollection(Of T), ByVal Parameters As ICollection(Of T)) As Boolean
        For Each parameter In Parameters
            If Not collection.Contains(parameter) Then
                Return False
            End If
        Next
        Return True
    End Function
End Module

And this is the result:

Local area connection

DNS server : 192.168.1.2

DNS server : 192.168.1.3

Local area connection 2

DNS server : 192.168.1.2

DNS server : 192.168.1.3

Local area connection 3

DNS server : 192.168.1.2

DNS server : 192.168.1.3

3

0

These are not the exact results for my machine but you get the point.

It seems to work 😉