linqvb.net中的动态连接

linqvb.net中的动态连接,vb.net,linq,join,Vb.net,Linq,Join,我有一个collection类Collection1的列表,并且想要得到一个Pin列表,给定名称“N1”,从最初的按名称选择开始,我应该得到那些以“.1”或“.2”结尾的Pin,然后在列表中找到另一个连接,即“.2”或“.1”) 结果应该是一个类似于此的列表 R1.1 NoUse1.10 L1.2 R1.2 NoUse1.19 C1.2 C1.1 NoUse2.3 L1.1 NoUse2.11 我只收到这个 R1.1 NoUse1.10 L1.2

我有一个
collection
Collection1
的列表,并且想要得到一个Pin列表,给定名称“N1”,从最初的按名称选择开始,我应该得到那些以“.1”或“.2”结尾的Pin,然后在列表中找到另一个连接,即“.2”或“.1”)

结果应该是一个类似于此的列表

R1.1  
NoUse1.10  
L1.2  
R1.2  
NoUse1.19  
C1.2  
C1.1  
NoUse2.3  
L1.1  
NoUse2.11
我只收到这个

R1.1  
NoUse1.10  
L1.2  
R1.2  
L1.1  
有没有一种方法可以通过编程方式更新LINQ中的连接?
多谢各位

这是我的密码

Public Class Form1

Private Property connCompsNetsSel As Object
Private Property Result As IEnumerable(Of String)

Private Property Result2 As IEnumerable(Of String)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim collection As New List(Of Collection1)
    collection.Add(New Collection1("N1", "R1.1"))
    collection.Add(New Collection1("N1", "NoUse1.10"))
    collection.Add(New Collection1("N1", "L1.2"))
    collection.Add(New Collection1("N2", "R1.2"))
    collection.Add(New Collection1("N2", "NoUse1.19"))
    collection.Add(New Collection1("N2", "C1.2"))
    collection.Add(New Collection1("N3", "C1.1"))
    collection.Add(New Collection1("N3", "NoUse2.3"))
    collection.Add(New Collection1("N4", "NoUse2.6"))
    collection.Add(New Collection1("N4", "C2.2"))
    collection.Add(New Collection1("N5", "C2.1"))
    collection.Add(New Collection1("N5", "C3.1"))
    collection.Add(New Collection1("N6", "C7.2"))
    collection.Add(New Collection1("N6", "C7.2"))
    collection.Add(New Collection1("N10", "L1.1"))
    collection.Add(New Collection1("N10", "NoUse2.11"))

    'get initial pins from given name
    Result = From cns In collection _
        Where cns.Name = "N1" Select cns.Pin

    'get other pins
    Result2 = From cns In collection _
        Join cns1 In collection On _
            If(cns.Pin.ToString.Split(".")(1) = "1", cns.Pin.ToString.Split(".")(0) & ".2", cns.Pin.ToString.Split(".")(0) & ".1") Equals cns1.Pin.ToString _
        Where cns.Name = "N1" Select cns1.Pin

    'combine Result and Result2
    Dim finalResult As New ArrayList
    finalResult.AddRange(Result.ToArray)
    finalResult.AddRange(Result2.ToArray)
End Sub
End Class

Public Class Collection1
    Private _Name As String
    Private _Pin As String
Public Sub New(ByVal Name As String, ByVal Pin As String)
    _Name = Name
    _Pin = Pin
End Sub

Public Property Name As String
    Get
        Return _Name
    End Get

    Set(ByVal Value As String)
        _Name = Value
    End Set
End Property
Public Property Pin As String
    Get
        Return _Pin
    End Get
    Set(ByVal Value As String)
        _Pin = Value
    End Set
End Property
End Class
给出输出:

R1.1 
NoUse1.10 
L1.2 
R1.2 
NoUse1.19 
C1.2 
L1.1 
NoUse2.11 
C1.1 
NoUse2.3 

我很困惑。您希望获得名称为N1的PIN。但是你想得到包含.1或.2的管脚吗?然后,是否要将这两个管脚集合连接在一起?重叠部分呢?然后,您谈到希望获得列表中的另一个连接。我不知道你说的是什么意思。另外,请您向我解释一下您的if语句if(cns.Pin.ToString.Split(“.”)等在做什么?请更好地解释您正试图做什么。为了简化,请在Collection1中创建两个属性(pinmain、pinsub)如果只提供两个值(名称、接点),则在对象创建期间将接点拆分为单独的值。您不必这样做,但这将大大简化您的代码。只需运行两个不同的Linq查询,并将结果合并在一起。感谢大家花时间检查此问题,抱歉解释得不好。R1.1、NoUse1.10、L1.2的顺序不能保证,但它们将在R1.2和L1.1之前。如果您完全不关心order,您可以删除Order By子句。拆分PinMain和PinSub不是绝对必要的,但这是一种更好的方法。谢谢Robert,请查看我添加的注释,我需要遍历列表并使用pin的另一部分获取下一组pin。在初始查询中使用N1,我找到R1.1,现在我需要在l中搜索R1.2ist并找到以.1或.2结尾的PIN,然后重复该过程,并用循环更新答案Robert Mckee谢谢
R1.1 
NoUse1.10 
L1.2 
R1.2 
NoUse1.19 
C1.2 
L1.1 
NoUse2.11 
C1.1 
NoUse2.3