サンプルシナリオ
次のフィールドを持つデータベースにテーブルがあります:- SerialNo、GroupNo、Description、Quantity。現時点では、ADO.NET DataSet から取り込まれた DataTable を循環させており、次のようにフィールドを List に追加しています...
' Gets the items from the database and created a DataSet
' The DataSet has a named DataTable called MyTable
ds = GetItems
' Item is an model in my MVC project
Dim Item As Item
' I am creating a List of items...
i As List(Of Item)
For Each row As DataRow In ds.Tables("MyTable").Rows
Item = New Item() With {
.SerialNo = If(Not IsDBNull(row("SerialNo")), CInt(row("SerialNo")), 0),
.GroupNo = If(Not IsDBNull(row("GroupNo")), CStr(row("GroupNo")), ""),
.Description = If(Not IsDBNull(row("Description")), CStr(row("Description")), ""),
.Quantity = If(Not IsDBNull(row("Quantity")), CInt(row("Quantity")), 0)
}
ai.Add(Item)
Next
要件
すべての行を取得する代わりに、すべての GroupNo の最初の出現のみを取得し、この結果を List に返します。例えば...
- SerialNo = 1 GroupNo = 1 Description = アイテム A 数量 = 100
- SerialNo = 2 GroupNo = 1 Description = アイテム B 数量 = 100
- SerialNo = 3 GroupNo = 1 Description = アイテム C 数量 = 100
- SerialNo = 4 GroupNo = 2 Description = アイテム D 数量 = 100
- SerialNo = 5 GroupNo = 2 Description = アイテム E 数量 = 100
- SerialNo = 6 GroupNo = 3 Description = アイテム F 数量 = 100
...実際には、返すように変更する必要があります...
- SerialNo = 1 GroupNo = 1 Description = アイテム A 数量 = 100
- SerialNo = 4 GroupNo = 2 Description = アイテム D 数量 = 100
- SerialNo = 6 GroupNo = 3 Description = アイテム F 数量 = 100
.NET 4.0 で Visual Studio 2010 (VB.NET) を使用しています。
さまざまな方法で調査しようとしましたが、4 つの列すべてを抽出しようとして行き詰まり、正しくグループ化されていないようです。注: データのサブセットのみを返すようにクエリを変更したくありません。コードでフィルタリング/グループ化する必要があります。