As a matter of interest, do you know if there is a way to do a similar query on a dataset using LINQ?
You would have to run Linq against the DataTable.Rows collection. You could also use the DataTable.Compute method for a non-Linq solution.
Dim dt As New DataTable
Dim r As DataRow
'make some data to work with
With dt
.TableName = "fred"
.Columns.Add(New DataColumn("Account", GetType(Int32)))
.Columns.Add(New DataColumn("master code", GetType(String)))
.Columns.Add(New DataColumn("score", GetType(Int32)))
r = .NewRow : r(0) = 100 : r(1) = "code1" : r(2) = 1 : .Rows.Add(r)
r = .NewRow : r(0) = 101 : r(1) = "code1" : r(2) = 1 : .Rows.Add(r)
r = .NewRow : r(0) = 103 : r(1) = "code1" : r(2) = 1 : .Rows.Add(r)
r = .NewRow : r(0) = 105 : r(1) = "code3" : r(2) = 1 : .Rows.Add(r)
r = .NewRow : r(0) = 300 : r(1) = "code3" : r(2) = 32 : .Rows.Add(r)
.AcceptChanges()
End With
'Put it in a dataset, since that was what was asked for
Dim ds As New DataSet
ds.Tables.Add(dt)
Dim searchcode As String = "code3" 'something to seek
'Option 1: DatatTable.Compute method
Dim total1 As Int32 = CType(ds.Tables("fred").Compute("Sum([score])", "[master code]='" & searchcode & "'"), Int32)
'Option 2: Use Linq Extensions
'Note: I despise Anonymous Types and Inference, so I use typed Linq
Dim scores As IEnumerable(Of Int32) = From row In ds.Tables("fred").Rows Where CType(CType(row, DataRow).Item("master code"), String) = searchcode Select CType(CType(row, DataRow).Item("score"), Int32)
Dim total2 …