Example #1
0
        public TResult MapResult <TResult>(object?source, Expression expression)
        {
            if (source != null && !(source is TResult) && source.IsCollection(out var enumerable))
            {
                var elementType = TypeHelper.GetElementType(enumerable.GetType()) ?? throw new RemoteLinqException($"Failed to get element type of {enumerable.GetType()}.");
                if (typeof(TResult).IsAssignableFrom(elementType) && expression is MethodCallExpression methodCallExpression)
                {
                    return(DynamicResultMapper.MapToSingleResult <TResult>(elementType, enumerable, methodCallExpression));
                }
            }

            return((TResult)source);
        }
Example #2
0
        public TResult MapResult <TResult>(object source, Expression expression)
        {
            if (source is IEnumerable enumerable)
            {
                var elementType = TypeHelper.GetElementType(enumerable.GetType());
                if (typeof(TResult).IsAssignableFrom(elementType) && expression is MethodCallExpression methodCallExpression)
                {
                    return(DynamicResultMapper.MapToSingleResult <TResult>(elementType, enumerable, methodCallExpression));
                }
            }

            return((TResult)source);
        }
Example #3
0
        /// <inheritdoc/>
        public TResult?MapResult <TResult>(object?source, Expression expression)
        {
            if (source is not null && source is not TResult && source.IsCollection(out var enumerable))
            {
                var elementType = TypeHelper.GetElementType(enumerable.GetType());
                if (typeof(TResult).IsAssignableFrom(elementType) && expression is MethodCallExpression methodCallExpression)
                {
                    return(DynamicResultMapper.MapToSingleResult <TResult>(elementType, enumerable, methodCallExpression));
                }
            }

            return(source is TResult result
                ? result
                : default);