/// <summary> /// 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 /// </summary> /// <typeparam name="TSource"></typeparam> /// <param name="source">A sequence to return a single element from</param> /// <param name="predicate">A function to test an element for a condition</param> /// <returns> /// The single element of the input sequence that satisfies the condition in predicate, /// or default(TSource) if no such element is found /// </returns> public static Task <TSource> SingleOrDefaultAsync <TSource>(this IQueryable <TSource> source, Expression <Func <TSource, bool> > predicate = null) { return(predicate == null?AsyncExtensions.SingleOrDefaultAsync(source) : AsyncExtensions.SingleOrDefaultAsync(source, predicate)); }
/// <summary> /// Asynchronously loads first record from query. /// Returns <c>default(TSource)</c>, if query doesn't return any records. /// Throws exception, if query returns more than one record. /// </summary> /// <typeparam name="TSource">Query element type.</typeparam> /// <param name="source">Source query.</param> /// <param name="token">Optional asynchronous operation cancellation token.</param> /// <returns>First record from query results or <c>default(TSource)</c> for empty resultset.</returns> public static Task <TSource> SingleOrDefaultAsyncLinqToDB <TSource>( this IQueryable <TSource> source, CancellationToken token = default) => AsyncExtensions.SingleOrDefaultAsync(source.ToLinqToDB(), token);
/// <inheritdoc cref="AsyncExtensions.SingleOrDefaultAsync{TSource}(IQueryable{TSource}, Expression{Func{TSource, bool}}, CancellationToken)"/> public static Task <TSource> SingleOrDefaultAsyncLinqToDB <TSource>( this IQueryable <TSource> source, Expression <Func <TSource, bool> > predicate, CancellationToken token = default) => AsyncExtensions.SingleOrDefaultAsync(source.ToLinqToDB(), predicate, token);