Vb.net 使用LINQ查找相同的属性值字段
在我的VB.NET项目中,我有以下课程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 (
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添加了示例函数的问题。