Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用LINQ查找相同的属性值字段_Vb.net_Visual Studio 2010_Linq - Fatal编程技术网

Vb.net 使用LINQ查找相同的属性值字段

Vb.net 使用LINQ查找相同的属性值字段,vb.net,visual-studio-2010,linq,Vb.net,Visual Studio 2010,Linq,在我的VB.NET项目中,我有以下课程 Public Class Field Public Property FieldName As String Public Property ScriptObject As Script End Class Public Class Script Public Property ScriptName As String Public Property InputParamList As List (

在我的VB.NET项目中,我有以下课程

Public Class Field
       Public Property FieldName As String
       Public Property ScriptObject As Script
End Class

Public Class Script
       Public Property ScriptName As String
       Public Property InputParamList As List (Of InputParam)
       Public Property OutputParam As String
End Class


Public Class InputParam
       Public Property ParamName As String
       Public Property Type As String //Type can be Field, FixValue or Counter
       Public Property FieldName As String
       Public Property FixValue As String
       Public Property CounterObject As Counter
End Class

Public Class Counter
       Public Property StartValue As Integer
       Public Property StepValue As Integer
End Class
我的一个业务函数返回我的
列表(字段)
。从
列表(字段)
中,我需要筛选/查找具有相同脚本配置手段的字段,这些字段具有相同的脚本名称,具有相同的输入参数配置(名称、类型、字段名称、固定值,以及计数器配置(StartValue、StepValue))

如何使用LINQ查询或通过EqualityComparer或任何其他方式实现这一点

示例

===================

下面是示例函数
GetFields()
函数从我需要的
List(of Field)
返回
List(of Field)
,它具有相同的
ScriptObject
配置(相同的属性值)。在下面的
GetFields()
函数中,FirstField和SecondField在脚本名称、InputParam属性方面具有相同的ScriptObject。因此,我想将
List(of Field)
中的
I分组(of String,List(of Field))
(ScriptName('Script1')作为字符串和List(of Field),List(of Field)具有第一个和第二个字段项。使用LINQ或任何其他方式返回
GetFields()

Public Function GetFields() As List(Of Field)
    Dim oFieldList As New List(Of Field)
    Dim oFirstScript As Script = GetFirstScript()
        Dim oSecondScript As Script = GetSecondScript()


    Dim oFirstField As New Field
    oFirstField.Name = "FirstField"
    oFirstField.ScriptObject = New Script()
    oFirstField.ScriptObject.Name = oFirstScript.Name
    oFirstField.ScriptObject.InputParamList = new List(Of InputParam)

    For Each oInParam In oFirstScript.InputParamList
        Dim oInputParam = New InputParam()
        oInputParam.Name = oInParam.Name
        oInputParam.Type = oInParam.Type
        oInputParam.FixVaue = oInParam.FixValue
        oInputParam.CounterObject = oInParam.CounterObject  
        oFirstField.ScriptObject.InputParamList.Add(oInputParam)
    Next

    oFirstField.OutputParam = oFirstScript.OutputParam

    oFieldList.Add(oFirstField)

    //Second Field
    Dim oSecondField As New Field
    oSecondField.Name = "SecondField" 
    oSecondField.ScriptObject = New Script()
    oSecondField.ScriptObject.Name = oFirstScript.Name
    oSecondField.ScriptObject.InputParamList = new List(Of InputParam)

    For Each oInParam In oFirstScript.InputParamList
        Dim oInputParam = New InputParam()
        oInputParam.Name = oInParam.Name
        oInputParam.Type = oInParam.Type
        oInputParam.FixVaue = oInParam.FixValue
        oInputParam.CounterObject = oInParam.CounterObject  
        oSecondField.ScriptObject.InputParamList.Add(oInputParam)
    Next

    oSecondField.OutputParam = oFirstScript.OutputParam

    oFieldList.Add(oSecondField)

    //Third Field
    Dim oThirdField As New Field
    oThirdField.Name = "ThirdField" 
    oThirdField.ScriptObject = New Script()
    oThirdField.ScriptObject.Name = oSecondScript.Name
    oThirdField.ScriptObject.InputParamList = new List(Of InputParam)

    For Each oInParam In oSecondScript.InputParamList
        Dim oInputParam = New InputParam()
        oInputParam.Name = oInParam.Name
        oInputParam.Type = oInParam.Type
        oInputParam.FixVaue = oInParam.FixValue
        oInputParam.CounterObject = oInParam.CounterObject  
        oThirdField.ScriptObject.InputParamList.Add(oInputParam)
    Next

    oThirdField.OutputParam = oSecondScript.OutputParam

    oFieldList.Add(oThirdField)

    Return oFieldList
End Function

Public Function GetFirstScript() As Script
    Dim oScript As New Script
    oScript.Name = "Script1"
    oScript.InputParamList = New List(Of InputParam)

    Dim oFieldInputParam As New InputParam
    oFieldInputParam.Name = "Param1"
    oFieldInputParam.Type = "Field"
    oFieldInputParam.FieldName = "FirstField"
    oFieldInputParam.FixValue = String.Empty
    oFieldInputParam.CounterObject = Nothing

    oScript.InputParamList.Add(oFieldInputParam)

    Dim oFixInputParam As New InputParam
    oFixInputParam.Name = "Param2"
    oFixInputParam.Type = "FixValue"
    oFixInputParam.FieldName = String.Empty
    oFixInputParam.FixValue = "123"
    oFixInputParam.CounterObject = Nothing

    oScript.InputParamList.Add(oFixInputParam)

    Dim oCounterInputParam As New InputParam
    oCounterInputParam.Name = "Param3"
    oCounterInputParam.Type = "Counter"
    oCounterInputParam.FieldName = String.Empty
    oCounterInputParam.FixValue = String.Empty
    oCounterInputParam.CounterObject = New Counter
    oCounterInputParam.CounterObject.StartValue = 1
    oCounterInputParam.CounterObject.StepValue = 1

    oScript.InputParamList.Add(oCounterInputParam)

    oScript.OutputParam = "returnResult"

    Return oScript
End Function

Public Function GetSecondScript() As Script
    Dim oScript As New Script
    oScript.Name = "Script2"
    oScript.InputParamList = New List(Of InputParam)

    Dim oFieldInputParam As New InputParam
    oFieldInputParam.Name = "Param1"
    oFieldInputParam.Type = "Field"
    oFieldInputParam.FieldName = "SecondField"
    oFieldInputParam.FixValue = String.Empty
    oFieldInputParam.CounterObject = Nothing

    oScript.InputParamList.Add(oFieldInputParam)

    Dim oFixInputParam As New InputParam
    oFixInputParam.Name = "Param2"
    oFixInputParam.Type = "FixValue"
    oFixInputParam.FieldName = String.Empty
    oFixInputParam.FixValue = "XYZ"
    oFixInputParam.CounterObject = Nothing

    oScript.InputParamList.Add(oFixInputParam)

    Dim oCounterInputParam As New InputParam
    oCounterInputParam.Name = "Param3"
    oCounterInputParam.Type = "Counter"
    oCounterInputParam.FieldName = String.Empty
    oCounterInputParam.FixValue = String.Empty
    oCounterInputParam.CounterObject = New Counter
    oCounterInputParam.CounterObject.StartValue = 1
    oCounterInputParam.CounterObject.StepValue = 1

    oScript.InputParamList.Add(oCounterInputParam)

    oScript.OutputParam = "returnResult"

    Return oScript
End Function
注意:ScriptName是唯一的。因此,同一脚本名ScriptObject不可能有不同的输入参数计数和参数名。只有参数的类型可以不同


谢谢。

不清楚您期望的输出是什么。举个例子会很有帮助。我需要一个列表(字段)作为输出,它具有相同的ScriptObject(名称,InputParamList)。我正在准备一个例子。那么,我很快会附加一个问题。与什么相同的ScriptObject?该列表可以有多个“组”的等效字段。我想,这就是您要寻找的@JonSkeet添加了示例函数的问题。