Beispiel #1
0
        /// <summary>
        /// Inserts source data into the first matching condition.
        /// </summary>
        /// <typeparam name="TSource">Source query record type.</typeparam>
        /// <param name="insert">Multi-table insert to perform.</param>
        /// <returns>Number of inserted rows.</returns>
        public static int InsertFirst <TSource>(this IMultiInsertElse <TSource> insert)
        {
            if (insert == null)
            {
                throw new ArgumentNullException(nameof(insert));
            }

            IQueryable query = ((MultiInsertQuery <TSource>)insert).Query;

            query = LinqExtensions.ProcessSourceQueryable?.Invoke(query) ?? query;

            return(query.Provider.Execute <int>(
                       Expression.Call(
                           null,
                           Methods.InsertFirst.MakeGenericMethod(typeof(TSource)),
                           query.Expression)));
        }
Beispiel #2
0
        /// <summary>
        /// Asynchronously inserts source data into the first matching condition.
        /// </summary>
        /// <typeparam name="TSource">Source query record type.</typeparam>
        /// <param name="insert">Multi-table insert to perform.</param>
        /// <param name="token">Cancellation token for async operation.</param>
        /// <returns>Number of inserted rows.</returns>
        public static Task <int> InsertFirstAsync <TSource>(this IMultiInsertElse <TSource> insert, CancellationToken token = default)
        {
            if (insert == null)
            {
                throw new ArgumentNullException(nameof(insert));
            }

            IQueryable query = ((MultiInsertQuery <TSource>)insert).Query;

            query = LinqExtensions.ProcessSourceQueryable?.Invoke(query) ?? query;

            var expr = Expression.Call(
                null,
                Methods.InsertFirst.MakeGenericMethod(typeof(TSource)),
                query.Expression);

            if (query is IQueryProviderAsync queryAsync)
            {
                return(queryAsync.ExecuteAsync <int>(expr, token));
            }

            return(Task.Run(() => query.Provider.Execute <int>(expr), token));
        }