VB.net中具有匿名类型和选项严格的Linq分组
尝试做一些我确信应该很简单的事情,但是要与linq和VB打交道。我有下面的例子,我用属性对集合进行分组,然后想要访问我的组的属性。我的问题是匿名打字。由于option strict,我必须给出一个显式类型,但我无法确定该类型应该是什么。由于t.HeadAccountKey不是值(因为t具有对象类型),因此无法编译下面的代码。所以要么我需要做一些铸造,要么我的linq选择器出错VB.net中具有匿名类型和选项严格的Linq分组,vb.net,linq,Vb.net,Linq,尝试做一些我确信应该很简单的事情,但是要与linq和VB打交道。我有下面的例子,我用属性对集合进行分组,然后想要访问我的组的属性。我的问题是匿名打字。由于option strict,我必须给出一个显式类型,但我无法确定该类型应该是什么。由于t.HeadAccountKey不是值(因为t具有对象类型),因此无法编译下面的代码。所以要么我需要做一些铸造,要么我的linq选择器出错 public class TempObject public HeadKey as string Pub
public class TempObject
public HeadKey as string
Public SubKey as string
Public SomeValue as decimal
end class
public class GroupTest
public sub RunTest
dim collection new List(of TempObject) = GetTestCollection()
Dim groupedValues As IEnumerable = From n In collection _
Group By key = n.HeadKey Into Group Select HeadKeyValue = key, SubValues = Group
for each t as object in groupedValues
debug.print(t.HeadKeyValue)
next
End sub
private function GetTestCollection() as List(of TempObject)
dim result as new list(of tempobject)
Dim x As New tempObject
x.HeadAccountNumber = "A"
x.SubAccountNumber = "B"
x.Value = 500
result.Add(x)
x = New tempObject
x.HeadAccountNumber = "A"
x.SubAccountNumber = "C"
x.Value = 600
result.Add(x)
x = New tempObject
x.HeadAccountNumber = "B"
x.SubAccountNumber = "D"
x.Value = 100
result.add(x)
return result
end function
End class
您不需要指定类型,至少使用(推荐,不要与
选项Strict
混淆)
因此,以下工作:
Dim collection = GetTestCollection()
Dim groupedValues = From n In collection
Group n By n.HeadKey Into Group
For Each t In groupedValues
Dim hk = t.HeadKey
Dim group = t.Group
Next