今日はLINQ to Objectをクエリ形式で利用してGroupBy句を作成。
GroupByで集計単位を指定しinto句でGroupオブジェクトを生成。
SQLと違ってまとまったGroupオブジェクトをループで取得できるので帳票を作りるときや総合計を出しつつ、明細を表示する場合などに便利。
WPFのDataGridでGroupingしたりTreeListViewなどで表示するといい感じに見える。
販売管理システムとかだと請求書などで鏡の部分を作成しつつ、明細の部分も表示するようなときに使いやすい。
Private Sub btnGroup_Click(sender As Object, e As EventArgs) Handles btnGroup.Click
Dim dtUri As New DataTable
Dim drUriSample As DataRow
' ▼ 売上データ
dtUri.Columns.Add(New DataColumn("売上No", GetType(Integer)))
dtUri.Columns.Add(New DataColumn("売上日", GetType(String)))
dtUri.Columns.Add(New DataColumn("得意先CD", GetType(String)))
dtUri.Columns.Add(New DataColumn("商品名", GetType(String)))
dtUri.Columns.Add(New DataColumn("売上数量", GetType(Decimal)))
dtUri.Columns.Add(New DataColumn("売上金額", GetType(Decimal)))
' テストデータ
drUriSample = dtUri.NewRow
drUriSample("売上No") = 1
drUriSample("売上日") = "20171031"
drUriSample("得意先CD") = "00001"
drUriSample("商品名") = "パソコン"
drUriSample("売上数量") = 1
drUriSample("売上金額") = 150000
dtUri.Rows.Add(drUriSample)
drUriSample = dtUri.NewRow
drUriSample("売上No") = 2
drUriSample("売上日") = "20171031"
drUriSample("得意先CD") = "00002"
drUriSample("商品名") = "マウス"
drUriSample("売上数量") = 1
drUriSample("売上金額") = 3000
dtUri.Rows.Add(drUriSample)
drUriSample = dtUri.NewRow
drUriSample("売上No") = 1
drUriSample("売上日") = "20171031"
drUriSample("得意先CD") = "00001"
drUriSample("商品名") = "モニター"
drUriSample("売上数量") = 2
drUriSample("売上金額") = 30000
dtUri.Rows.Add(drUriSample)
Dim lnqGroup = From drUri In dtUri.AsEnumerable
Group By TokCD = drUri("得意先CD")
Into grp = Group
Select New With {
.得意先CD = TokCD,
.grp = grp
}
Dim strMsg As String = ""
For Each lnqdr In lnqGroup
strMsg += "得意先CD:" & lnqdr.得意先CD & vbCrLf
strMsg += "合計金額:" & lnqdr.grp.Sum(Function(drChild) drChild("売上金額")) & vbCrLf
'まとまった単位
For Each drGrpChild In lnqdr.grp
strMsg += "商品名:" & drGrpChild("商品名") & " 数量:" & drGrpChild("売上数量") & " 金額:" & drGrpChild("売上金額") & vbCrLf
Next
MsgBox(strMsg)
strMsg = ""
Next
End Sub
登録:
コメントの投稿 (Atom)
PowerShellでDataSetのXMLの内容をシリアライズし、生成された文字列を再度デシリアライズする
修正前のテーブルの内容をXMLデータとして保存し、ログテーブルに格納することで、履歴を退避する Step1 DataSetをシリアライズしXML形式の文字列を作成する Step2 文字列をログテーブルへ保存する(普通にInsert) Step3 ログ...
-
TreeListView上でコンボボックスを利用するときにフォーカスのあるコンボボックスの色をイベントで変えようとしたけど上手くいかなかった。 色々と調べているとXaml側のテンプレートをいじる必要があるみたいだったので、いろいろとやってみた。 とりあえず、コンボボックス...
-
サイトに自動でログインするVBSのソース 事前に対象のWebサイトを開いて、F12キーを押下して、要素の名前を調べておく。 ※Edge、Chromeなどのブラウザ objIE.Visible = Trueの部分を objIE.Visible = Falseにしておけば...
-
開発中のプログラムがあまり進んでないのでSQLの小ネタ。 昔、よくあった遅いSQLの改善方法について、記載。 インデックスを張ったりするのもいいけど、SQLを作るときにデータをたくさん持ってきてまとめて条件分岐をCASE式でするだけで 圧倒的に速度が改善できる。 例えば...
0 件のコメント:
コメントを投稿