public static Expression CreateSelection(
        this QueryableProjectionScope scope,
        Expression source,
        Type sourceType)
    {
        MethodCallExpression selection = Expression.Call(
            typeof(Enumerable),
            nameof(Enumerable.Select),
            new[]
        {
            scope.RuntimeType,
            scope.RuntimeType
        },
            source,
            scope.CreateMemberInitLambda());

        if (sourceType.IsArray)
        {
            return(ToArray(scope, selection));
        }

        if (TryGetSetType(sourceType, out Type? setType))
        {
            return(ToSet(selection, setType));
        }

        return(ToList(scope, selection));
    }
 public static Expression <Func <T, T> > Project <T>(this QueryableProjectionScope scope)
 {
     return((Expression <Func <T, T> >)scope.CreateMemberInitLambda());
 }