VB.Net/LINQ/Func

Материал из VB Эксперт
Перейти к: навигация, поиск

Func with user-defined function

<source lang="vbnet"> Imports System.Collections.Generic Imports System.Linq Imports System.Runtime.rupilerServices

Public Class Role

   Public ID As Integer
   Public RoleDescription As String

End Class Public Class Person

   Public ID As Integer
   Public IDRole As Integer
   Public LastName As String
   Public FirstName As String

End Class

Module Module1

   Sub Main()
       Dim people As New List(Of Person)(New Person() { _
           New Person With {.ID = 1, .IDRole = 1, .LastName = "A", .FirstName = "Brad"}, _
           New Person With {.ID = 2, .IDRole = 2, .LastName = "G", .FirstName = "Tom"} _
       })
       Dim roles As New List(Of Role)(New Role() { _
           New Role With {.ID = 1, .RoleDescription = "Manager"}, _
           New Role With {.ID = 2, .RoleDescription = "Developer"} _
       })
       Dim predicate As New Func(Of Person, Boolean)(AddressOf wherePredicate)
       Dim query = people.Where(predicate)
   End Sub
   Public Function wherePredicate(ByVal p As Person) As Boolean
       Return p.ID = 1
   End Function

End Module


 </source>


Using Func to do filter

<source lang="vbnet">

Module Program

   Sub Main()
       Dim currentVideoGames As String() = {"A", "B", "this is a test", "C", "D", "E"}
       Dim searchFilter As New Func(Of String, Boolean)(AddressOf Filter)
       Dim itemToProcess As New Func(Of String, String)(AddressOf ProcessItem)
       Dim subset = currentVideoGames.Where(searchFilter).OrderBy(itemToProcess).Select(itemToProcess)
       For Each game In subset
           Console.WriteLine("Item: {0}", game)
       Next
   End Sub
   Function Filter(ByVal str As String) As Boolean
       Return str.Length > 6
   End Function
   Function ProcessItem(ByVal str As String) As String
       Return str
   End Function

End Module


 </source>


Using Func to do filter 2

<source lang="vbnet">

Module Program

 Sub Main()
   Dim currentVideoGames As String() = {"A", "B", "this is a test", "C","D", "E"}
   Dim subset = From g In currentVideoGames Where g.Length > 6 Order By g Select g
   For Each s As String In subset
     Console.WriteLine("Item: {0}", s)
   Next
 End Sub

End Module


 </source>