LINQ To DataSet Samples - Query ExecutionOn This Page |
The following sample shows how queries can be executed immediately with operators such as ToLookup().
Public Sub DataSetLinq108()
Dim products = TestDS.Tables("Products").AsEnumerable()
Dim productsLookup = products.ToLookup(Function(p) p("Category"))
Dim confections = productsLookup("Confections")
Console.WriteLine("Number of categories: {0}", productsLookup.Count)
For Each product In confections
Console.WriteLine("ProductName: {0}", product("ProductName"))
Next
End Sub
Result:
Number of categories: 8
ProductName: Pavlova
ProductName: Teatime Chocolate Biscuits
ProductName: Sir Rodney's Marmalade
ProductName: Sir Rodney's Scones
ProductName: NuNuCa Nuß-Nougat-Creme
ProductName: Gumbär Gummibärchen
ProductName: Schoggi Schokolade
ProductName: Zaanse koeken
ProductName: Chocolade
ProductName: Maxilaku
ProductName: Valkoinen suklaa
ProductName: Tarte au sucre
ProductName: Scottish Longbreads
The following sample shows how queries can be executed immediately with operators such as ToList().
Public Sub DataSetLinq100()
' Methods like ToList() cause the query to be
' executed immediately, caching the results.
Dim numbers = TestDS.Tables("Numbers").AsEnumerable()
Dim i As Integer = 0
Dim q = (From n In numbers _
Select Increment(i)).ToList()
' The local variable i has already been fully
' incremented before we iterate the results:
For Each v In q
Console.WriteLine("v = " & v & ", i = " & i)
Next
End Sub
Result:
v = 1, i = 10
v = 2, i = 10
v = 3, i = 10
v = 4, i = 10
v = 5, i = 10
v = 6, i = 10
v = 7, i = 10
v = 8, i = 10
v = 9, i = 10
v = 10, i = 10
The following sample shows how, because of deferred execution, queries can be used again after data changes and will then operate on the new data.
Public Sub DataSetLinq101()
' Deferred execution lets us define a query once
' and then reuse it later after data changes.
Dim numbers = TestDS.Tables("Numbers").AsEnumerable()
Dim lowNumbers = From n In numbers _
Where n!number <= 3 _
Select n
Console.WriteLine("First run numbers <= 3:")
For Each n In lowNumbers
Console.WriteLine(n!number)
Next
For i As Integer = 0 To TestDS.Tables("Numbers").Rows.Count - 1
TestDS.Tables("Numbers").Rows(i)!number -= 1
Next
' During this second run, the same query object,
' lowNumbers, will be iterating over the new state
' of numbers(), producing different results:
Console.WriteLine("Second run numbers <= 3:")
For Each n In lowNumbers
Console.WriteLine(n!number)
Next
End Sub
Result:
First run numbers <= 3:
1
3
2
0
Second run numbers <= 3:
3
0
2
1
-1