【问题标题】:Linq Grouping in VB.net with anonymous types and option strictVB.net 中使用匿名类型和选项严格的 Linq 分组
【发布时间】:2012-04-24 19:56:31
【问题描述】:

尝试做一些我确信应该很简单的事情,但在 linq 和 VB 中遇到了困难。我有以下内容,我正在按属性对集合进行分组,然后想要访问我的组的属性。我遇到的问题是匿名打字。由于选项严格,我必须给出一个明确的类型,但我无法确定该类型应该是什么。以下内容无法编译,因为 t.HeadAccountKey 不是值(因为 t 具有对象类型)。所以要么我需要做一些转换,要么我的 linq 选择器是错误的,

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

【问题讨论】:

    标签: vb.net linq


    【解决方案1】:

    您不需要指定类型,至少使用Option Infer on(推荐,不要与Option 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      相关资源
      最近更新 更多