VB.Net/LINQ/Func

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

Func with user-defined function

  
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


Using Func to do filter

  

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


Using Func to do filter 2

  

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