/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Test/Emit/ExpressionTrees/Sources/QueryHelper.vb
89 строк
4 KB
Jonathon Marolf
update headers
23 янв 2020, 04:01
Не верифицирован
23 янв 2020, 04:01
91571a3
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports System Imports System.Collections.Generic Imports System.Linq.Expressions Imports System.Runtime.CompilerServices Namespace Global Public Class QueryHelper(Of T) : Implements System.Linq.IQueryable(Of T), System.Linq.IQueryProvider Public ReadOnly Property Value As T Get Return Nothing End Get End Property Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of T) Implements System.Collections.Generic.IEnumerable(Of T).GetEnumerator Return DirectCast(New T() {}, IEnumerable(Of T)).GetEnumerator End Function Public Function GetEnumerator1() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator Return (New T() {}).GetEnumerator End Function Public ReadOnly Property ElementType As System.Type Implements System.Linq.IQueryable.ElementType Get Return GetType(T) End Get End Property Public ReadOnly Property Expression As Expression Implements System.Linq.IQueryable.Expression Get Return System.Linq.Expressions.Expression.Constant(DirectCast(Nothing, QueryHelper(Of T)), GetType(QueryHelper(Of T))) End Get End Property Public ReadOnly Property Provider As System.Linq.IQueryProvider Implements System.Linq.IQueryable.Provider Get Return Me End Get End Property Public Function CreateQuery(expression As System.Linq.Expressions.Expression) As System.Linq.IQueryable Implements System.Linq.IQueryProvider.CreateQuery Return CreateQuery1(Of T)(expression) End Function Public Function CreateQuery1(Of TElement)(expression As System.Linq.Expressions.Expression) As System.Linq.IQueryable(Of TElement) Implements System.Linq.IQueryProvider.CreateQuery Return New QueryHelper(Of TElement)() End Function Public Function Execute(expression As System.Linq.Expressions.Expression) As Object Implements System.Linq.IQueryProvider.Execute Return Execute1(Of T)(expression) End Function Public Function Execute1(Of TResult)(expression As System.Linq.Expressions.Expression) As TResult Implements System.Linq.IQueryProvider.Execute Return Nothing End Function End Class <Extension()> Public Module ExpressionTreeHelpers <Extension()> Public Function [Select](Of T, S)(ByVal i As QueryHelper(Of T), ByVal func As Expression(Of Func(Of T, S))) As QueryHelper(Of S) Console.WriteLine(func.Dump) Return New QueryHelper(Of S)() End Function <Extension()> _ Public Function [SelectMany](Of TSource, TCollection, TResult)(ByVal source As QueryHelper(Of TSource), ByVal collectionSelector As Expression(Of Func(Of TSource, IEnumerable(Of TCollection))), ByVal resultSelector As Expression(Of Func(Of TSource, TCollection, TResult))) As QueryHelper(Of TResult) 'Console.WriteLine(collectionSelector.Dump) Console.WriteLine(resultSelector.Dump) Return New QueryHelper(Of TResult)() End Function <Extension()> _ Public Function [Where](Of T)(ByVal source As QueryHelper(Of T), ByVal predicate As Expression(Of Func(Of T, Boolean))) As QueryHelper(Of T) Console.WriteLine(predicate.Dump) Return source End Function Public Function GetQueryCollection(Of T)(ParamArray elements() As T) As QueryHelper(Of T) Return New QueryHelper(Of T)() End Function <Extension()> _ Public Function GroupJoin(Of TOuter, TInner, TKey, TResult)(outer As System.Linq.IQueryable(Of TOuter), inner As System.Linq.IQueryable(Of TInner), outerKeySelector As Expression(Of Func(Of TOuter, TKey)), innerKeySelector As Expression(Of Func(Of TInner, TKey)), resultSelector As Expression(Of Func(Of TOuter, System.Linq.IQueryable(Of TInner), TResult))) As System.Linq.IQueryable(Of TResult) Console.WriteLine(outerKeySelector.Dump) Console.WriteLine(innerKeySelector.Dump) Console.WriteLine(resultSelector.Dump) Return New QueryHelper(Of TResult)() End Function End Module End Namespace