2

こんにちは、vb.net でグループ化された動的 linq クエリが必要です。

私のクエリは次のとおりです。

最初のクエリでは 2 つの列でグループ化する必要がありますが、2 番目のクエリでは 1 つの列でグループ化する必要があります。ユーザーがレポートをどのように見たいかによって異なります。

ユーザーの選択に従って実行時にこれらのクエリを生成するにはどうすればよいですか?

前もって感謝します。

Dim query = From r In dtString.AsEnumerable
        Group r By Key0 = r.Field(Of String)("country"),
                   Key1 = r.Field(Of String)("region") Into Group
        Select Key0, Key1,
               DebitTotal = Group.Sum(Function(r) r.Field(Of Decimal)("debit")),
               CreditTotal = Group.Sum(Function(r) r.Field(Of Decimal)("credit"))


Dim query = From r In dtString.AsEnumerable
        Group r By Key0 = r.Field(Of String)("country") Into Group
        Select Key0
               DebitTotal = Group.Sum(Function(r) r.Field(Of Decimal)("debit")),
               CreditTotal = Group.Sum(Function(r) r.Field(Of Decimal)("credit"))
4

1 に答える 1

1

句からわかるようSelectに、2つのクエリの結果は(匿名の​​)型互換ではありません。最も簡単な解決策は、2番目のクエリを2番目の冗長または定数グループキーを持つものに変更することです。

例えば

query = From r In dtString.AsEnumerable
    Group r By Key0 = r.Field(Of String)("country"),
               Key1 = r.Field(Of String)("country") Into Group
    Select Key0, Key1,
           DebitTotal = Group.Sum(Function(r) r.Field(Of Decimal)("debit")),
           CreditTotal = Group.Sum(Function(r) r.Field(Of Decimal)("credit"))

また

query = From r In dtString.AsEnumerable
    Group r By Key0 = r.Field(Of String)("country"),
               Key1 = "ignored" Into Group
    Select Key0, Key1,
           DebitTotal = Group.Sum(Function(r) r.Field(Of Decimal)("debit")),
           CreditTotal = Group.Sum(Function(r) r.Field(Of Decimal)("credit"))

(未テスト)

次に、必要に応じて無視するように結果の表示を調整するkey1必要があります。

于 2012-10-15T01:03:31.920 に答える