Webiant Logo Webiant Logo
  1. No results found.

    Try your search with a different keyword or use * as a wildcard.

AsyncIQueryableExtensions.cs

using System.Linq.Expressions;
using LinqToDB;
using Nop.Core;

namespace System.Linq;

public static class AsyncIQueryableExtensions
{
    /// 
    /// Determines whether all the elements of a sequence satisfy a condition
    /// 
    /// The type of the elements of source
    /// A sequence whose elements to test for a condition
    /// A function to test each element for a condition
    /// 
    /// true if every element of the source sequence passes the test in the specified
    /// predicate, or if the sequence is empty; otherwise, false
    /// 
    /// A task that represents the asynchronous operation
    public static Task AllAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AllAsync(source, predicate);
    }

    /// 
    /// Determines whether any element of a sequence satisfies a condition
    /// 
    /// The type of the elements of source
    /// A sequence whose elements to test for a condition
    /// A function to test each element for a condition
    /// 
    /// true if any elements in the source sequence pass the test in the specified predicate;
    /// otherwise, false
    /// 
    /// A task that represents the asynchronous operation
    public static Task AnyAsync(this IQueryable source, Expression> predicate = null)
    {
        return predicate == null ? AsyncExtensions.AnyAsync(source) : AsyncExtensions.AnyAsync(source, predicate);
    }

    #region Average

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    /// 
    /// Computes the average of a sequence that is obtained by
    /// invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to calculate the average of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the average of the sequence of values
    /// 
    public static Task AverageAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.AverageAsync(source, predicate);
    }

    #endregion

    /// 
    /// Determines whether a sequence contains a specified element by using the default
    /// equality comparer
    /// 
    /// The type of the elements of source
    /// An sequence in which to locate item
    /// The object to locate in the sequence
    /// 
    /// true if the input sequence contains an element that has the specified value;
    /// otherwise, false
    /// 
    /// A task that represents the asynchronous operation
    public static Task ContainsAsync(this IQueryable source, TSource item)
    {
        return AsyncExtensions.ContainsAsync(source, item);
    }

    /// 
    /// Returns the number of elements in the specified sequence that satisfies a condition
    /// 
    /// The type of the elements of source
    /// An sequence that contains the elements to be counted
    /// A function to test each element for a condition
    /// 
    /// The number of elements in the sequence that satisfies the condition in the predicate
    /// function
    /// 
    /// A task that represents the asynchronous operation
    public static Task CountAsync(this IQueryable source,
        Expression> predicate = null)
    {
        return predicate == null ? AsyncExtensions.CountAsync(source) : AsyncExtensions.CountAsync(source, predicate);
    }

    /// 
    /// Returns the first element of a sequence that satisfies a specified condition
    /// 
    /// 
    /// An sequence to return an element from
    /// A function to test each element for a condition
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the first element in source that passes the test in predicate
    /// 
    public static Task FirstAsync(this IQueryable source,
        Expression> predicate = null)
    {
        return predicate == null ? AsyncExtensions.FirstAsync(source) : AsyncExtensions.FirstAsync(source, predicate);
    }

    /// 
    /// Returns the first element of a sequence, or a default value if the sequence contains no elements
    /// 
    /// The type of the elements of source
    /// Source
    /// Predicate
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the default(TSource) if source is empty; otherwise, the first element in source
    /// 
    public static Task FirstOrDefaultAsync(this IQueryable source,
        Expression> predicate = null)
    {
        return predicate == null ? AsyncExtensions.FirstOrDefaultAsync(source) : AsyncExtensions.FirstOrDefaultAsync(source, predicate);
    }

    /// 
    /// Returns an System.Int64 that represents the number of elements in a sequence
    /// that satisfy a condition
    /// 
    /// The type of the elements of source
    /// An sequence that contains the elements to be counted
    /// A function to test each element for a condition
    /// 
    /// The number of elements in source that satisfy the condition in the predicate
    /// function
    /// 
    /// A task that represents the asynchronous operation
    public static Task LongCountAsync(this IQueryable source,
        Expression> predicate = null)
    {
        return predicate == null ? AsyncExtensions.LongCountAsync(source) : AsyncExtensions.LongCountAsync(source, predicate);
    }

    /// 
    /// Returns the maximum value in a generic sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to determine the maximum of
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the maximum value in the sequence
    /// 
    public static Task MaxAsync(this IQueryable source)
    {
        return AsyncExtensions.MaxAsync(source);
    }

    /// 
    /// Invokes a projection function on each element of a generic sequence
    /// and returns the maximum resulting value
    /// 
    /// The type of the elements of source
    /// The type of the value returned by the function represented by selector
    /// A sequence of values to determine the maximum of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the maximum value in the sequence
    /// 
    public static Task MaxAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.MaxAsync(source, predicate);
    }

    /// 
    /// Returns the minimum value in a generic sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values to determine the minimum of
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the minimum value in the sequence
    /// 
    public static Task MinAsync(this IQueryable source)
    {
        return AsyncExtensions.MinAsync(source);
    }

    /// 
    /// Invokes a projection function on each element of a generic sequence
    /// and returns the minimum resulting value
    /// 
    /// The type of the elements of source
    /// The type of the value returned by the function represented by selector
    /// A sequence of values to determine the minimum of
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the minimum value in the sequence
    /// 
    public static Task MinAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.MinAsync(source, predicate);
    }

    /// 
    /// Returns the only element of a sequence that satisfies a specified condition,
    /// and throws an exception if more than one such element exists
    /// 
    /// 
    /// An sequence to return a single element from
    /// A function to test an element for a condition
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the single element of the input sequence that satisfies the condition in predicate
    /// 
    public static Task SingleAsync(this IQueryable source,
        Expression> predicate = null)
    {
        return predicate == null ? AsyncExtensions.SingleAsync(source) : AsyncExtensions.SingleAsync(source, predicate);
    }

    /// 
    /// Returns the only element of a sequence that satisfies a specified condition or
    /// a default value if no such element exists; this method throws an exception if
    /// more than one element satisfies the condition
    /// 
    /// 
    /// A sequence to return a single element from
    /// A function to test an element for a condition
    /// 
    /// The single element of the input sequence that satisfies the condition in predicate,
    /// or default(TSource) if no such element is found
    /// 
    /// A task that represents the asynchronous operation
    public static Task SingleOrDefaultAsync(this IQueryable source,
        Expression> predicate = null)
    {
        return predicate == null ? AsyncExtensions.SingleOrDefaultAsync(source) : AsyncExtensions.SingleOrDefaultAsync(source, predicate);
    }

    #region Sum

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    /// 
    /// Computes the sum of the sequence that is obtained
    /// by invoking a projection function on each element of the input sequence
    /// 
    /// The type of the elements of source
    /// A sequence of values of type TSource
    /// A projection function to apply to each element
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the sum of the projected values
    /// 
    public static Task SumAsync(this IQueryable source,
        Expression> predicate)
    {
        return AsyncExtensions.SumAsync(source, predicate);
    }

    #endregion

    /// 
    /// Asynchronously loads data from query to a dictionary
    /// 
    /// Query element type
    /// Dictionary key type
    /// Dictionary element type
    /// Source query
    /// Source element key selector
    /// Dictionary element selector
    /// Dictionary key comparer
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the dictionary with query results
    /// 
    public static Task> ToDictionaryAsync(
        this IQueryable source, Func keySelector, Func elementSelector,
        IEqualityComparer comparer = null) where TKey : notnull
    {
        return comparer == null
            ? AsyncExtensions.ToDictionaryAsync(source, keySelector, elementSelector)
            : AsyncExtensions.ToDictionaryAsync(source, keySelector, elementSelector, comparer);
    }

    /// 
    /// Asynchronously loads data from query to a dictionary
    /// 
    /// Query element type
    /// Dictionary key type
    /// Source query
    /// Source element key selector
    /// Dictionary key comparer
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the dictionary with query results
    /// 
    public static Task> ToDictionaryAsync(this IQueryable source,
        Func keySelector, IEqualityComparer comparer = null) where TKey : notnull
    {
        return comparer == null
            ? AsyncExtensions.ToDictionaryAsync(source, keySelector)
            : AsyncExtensions.ToDictionaryAsync(source, keySelector, comparer);
    }

    /// 
    /// Asynchronously loads data from query to a list
    /// 
    /// Query element type
    /// Source query
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the list with query results
    /// 
    public static Task> ToListAsync(this IQueryable source)
    {
        return AsyncExtensions.ToListAsync(source);
    }

    /// 
    /// Asynchronously loads data from query to an array
    /// 
    /// Query element type
    /// Source query
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the array with query results
    /// 
    public static Task ToArrayAsync(this IQueryable source)
    {
        return AsyncExtensions.ToArrayAsync(source);
    }

    /// 
    /// Ctor
    /// 
    /// source
    /// Page index
    /// Page size
    /// A value in indicating whether you want to load only total number of records. Set to "true" if you don't want to load data from database
    /// A task that represents the asynchronous operation
    public static async Task> ToPagedListAsync(this IQueryable source, int pageIndex, int pageSize, bool getOnlyTotalCount = false)
    {
        if (source == null)
            return new PagedList(new List(), pageIndex, pageSize);

        //min allowed page size is 1
        pageSize = Math.Max(pageSize, 1);

        var count = await source.CountAsync();

        var data = new List();

        if (!getOnlyTotalCount)
            data.AddRange(await source.Skip(pageIndex * pageSize).Take(pageSize).ToListAsync());

        return new PagedList(data, pageIndex, pageSize, count);
    }
}