0

何かをしようとするのは簡単なはずですが、linqとVBに苦労しています。以下に、コレクションをプロパティでグループ化してから、グループのプロパティにアクセスしたいというものがあります。私が抱えている問題は、匿名タイピングにあります。オプションstrictのため、明示的なタイプを指定する必要がありますが、タイプがどうあるべきかを理解できません。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
4

1 に答える 1

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
于 2012-04-24T11:56:31.307 に答える