' Visual Basic 2008 9.0 .NET Examples - Query Methods - New in Visual Basic 2008 - 9.0 : Option Strict On Option Infer On Public Class Counter Private m_Value As Integer Public Property Value() As Integer Get Value = m_Value End Get Set(ByVal value As Integer) m_Value = value End Set End Property End Class Public Module MyEnumerable _ Public Function GetWhere(Of T)(ByVal source As IEnumerable(Of T), _ ByVal predicate As Func(Of T, Boolean)) _ As IEnumerable(Of T) Dim getWhereList As New List(Of T) For Each item As T In source If predicate.Invoke(item) Then getWhereList.Add(item) End If Next GetWhere = getWhereList End Function End Module Public Class Example1 Public Shared Sub Main() Dim source = New Counter() {New Counter With {.Value = 10}, _ New Counter With {.Value = 20}, _ New Counter With {.Value = 30}} Dim predicate As Func(Of Counter, Boolean) = _ Function(counter) counter.Value > 15 Dim query1 = MyEnumerable.GetWhere(source, predicate) ' (1) For Each counter As Counter In query1 Console.WriteLine(counter.Value) Next Console.WriteLine() ' Dim query2 = source.GetWhere(Function(counter) counter.Value < 25) ' (2) For Each counter As Counter In query2 Console.WriteLine(counter.Value) Next ' Console.ReadLine() End Sub End Class Public Class Example2 Public Shared Sub Main() Dim source = New Counter() {New Counter With {.Value = 10}, _ New Counter With {.Value = 20}, _ New Counter With {.Value = 30}} Dim predicate As Func(Of Counter, Boolean) = _ Function(counter) counter.Value > 15 Dim query1 = System.Linq.Enumerable.Where(source, predicate) For Each counter As Counter In query1 Console.WriteLine(counter.Value) Next Console.WriteLine() ' Dim query2 = source.Where(Function(counter) counter.Value < 25) For Each counter As Counter In query2 Console.WriteLine(counter.Value) Next ' Console.ReadLine() End Sub End Class Public Class Example3 Public Shared Sub Main() Dim source1 = New Object() {1, "two", "3"c, "four", 5.0} Dim words As IEnumerable(Of String) = source1.OfType(Of String)() For Each word As String In words Console.WriteLine(word) Next Console.WriteLine() ' Dim source2 As New ArrayList source2.Add(New Counter With {.Value = 10}) source2.Add(New Counter With {.Value = 20}) source2.Add(New Counter With {.Value = 30}) Dim counters As IEnumerable(Of Counter) = source2.OfType(Of Counter)() For Each counter As Counter In counters Console.WriteLine(counter.Value) Next ' Console.ReadLine() End Sub End Class Public Class Example4 Public Shared Sub Main() Dim source = New Object() {1, "two", "3"c, "four", 5.0} Dim predicate1 As Func(Of String, Boolean) = _ Function(text) text.Contains("o") Dim predicate2 As Func(Of String, Boolean) = _ Function(text) text.StartsWith("f") Dim words As IEnumerable(Of String) words = source.OfType(Of String).Where(predicate1).Where(predicate2) For Each word As String In words Console.WriteLine(word) Next ' Console.ReadLine() End Sub End Class Public Class Example5 Public Shared Sub Main() Dim source = New Counter() {New Counter With {.Value = 10}, _ New Counter With {.Value = 20}, _ New Counter With {.Value = 30}} Dim query = source.Where(Function(counter) True) ' For Each counter As Counter In query ' (1) Console.WriteLine(counter.Value) Next Console.WriteLine() ' source(1) = New Counter With {.Value = 200} ' For Each counter As Counter In query ' (2) Console.WriteLine(counter.Value) Next ' Console.ReadLine() End Sub End Class Public Class Example6 Public Shared Sub Main() Dim source = New Counter() {New Counter With {.Value = 10}, _ New Counter With {.Value = 20}, _ New Counter With {.Value = 30}} Dim query = source.GetWhere(Function(counter) True) ' For Each counter As Counter In query ' (1) Console.WriteLine(counter.Value) Next Console.WriteLine() ' source(1) = New Counter With {.Value = 200} ' For Each counter As Counter In query ' (2) Console.WriteLine(counter.Value) Next ' Console.ReadLine() End Sub End Class Public Class Example8 Public Shared Sub Main() Dim source = New Counter() {New Counter With {.Value = 10}, _ New Counter With {.Value = 20}, _ New Counter With {.Value = 30}} Dim query = source.Where(Function(counter) True) ' Dim queryArray As Counter() = query.ToArray() Dim queryList As List(Of Counter) = query.ToList() ' source(1) = New Counter With {.Value = 200} ' For Each counter As Counter In queryArray ' (1) Console.WriteLine(counter.Value) Next Console.WriteLine() ' For Each counter As Counter In queryList ' (2) Console.WriteLine(counter.Value) Next ' Console.ReadLine() End Sub End Class Public Class Example9 Public Shared Sub Main() Dim source = New Counter() {New Counter With {.Value = 10}, _ New Counter With {.Value = 20}, _ New Counter With {.Value = 30}} ' Console.WriteLine(source.Any()) Console.WriteLine(source.All(Function(counter) counter.Value Mod 2 = 0)) Console.WriteLine(source.Average(Function(counter) counter.Value)) Console.WriteLine(source.ElementAt(2).Value) Console.WriteLine(source.First().Value) ' Console.ReadLine() End Sub End Class ' Visit www.studyvb.com for more examples. Copyright 2003-2008 De Wolf.