Scalar queryable example ( Query Design continued ):

 

This post is a part of a series of posts about query design. For the previous post see: https://blogs.msdn.com/vladimirsadov/archive/2007/06/08/generic-queryable-example-query-design-continued.aspx

 

 

Here is one more example of a queryable type. While weird and fairly useless it illustrates that queryable type does not have to be a collection. This one represents a single scalar value.


Public Delegate Function SelectorDelegate(Of T, S)(ByVal arg As T) As S

Class ScalarQueryable(Of T)

    Public element As T

    Public Function [Select](Of S)(ByVal projection As SelectorDelegate(Of T, S)) As ScalarQueryable(Of S)

        Dim new_col As New ScalarQueryable(Of S)

        Dim new_element As S

        new_col.element = new_element

        new_col.element = projection(element)

        Return new_col

    End Function

End Class

Module Module1

    Sub Main()

        Dim col As New ScalarQueryable(Of Integer)

        col.element = 1

        'note that the the result of the query is

        'another ScalarQueryable that contains a string

        Dim q = From i In col Select i_sqr = i * i

        Console.WriteLine(q.element)

    End Sub

End Module