VB.Net/LINQ/Func
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>