/// <inheritdoc/> protected sealed override void DoRun() { var input = new ModProductBaseJobListGetInput { DataPageNumber = 2, DataPageSize = 3 }; var result = new CoreBaseExecutionResultWithData <ModProductBaseJobListGetOutput>(); try { result.Data = Job.Execute(input).CoreBaseExtTaskWithCurrentCulture(false).GetResult(); Job.OnSuccess(Logger, result, input); } catch (Exception ex) { Job.OnError(ex, Logger, result); } var msg = result.CoreBaseExtJsonSerialize(CoreBaseExtJson.OptionsForLogger); Show(msg, false); }
/// <summary> /// Мод "Product". Основа. Расширение. Применить. Фильтрацию. /// </summary> /// <param name="query">Запрос.</param> /// <param name="input">Ввод.</param> /// <returns>Запрос с учётом фильтрации.</returns> public static IQueryable <DataEntityObjectProduct> ModProductBaseExtApplyFiltering( this IQueryable <DataEntityObjectProduct> query, ModProductBaseJobListGetInput input ) { if (!string.IsNullOrWhiteSpace(input.DataName)) { query = query.Where(x => x.Name.Contains(input.DataName)); } if (input.DataIds != null && input.DataIds.Any()) { query = query.Where(x => input.DataIds.Contains(x.Id)); } if (input.DataObjectProductCategoryId > 0) { query = query.Where(x => x.ObjectProductCategoryId == input.DataObjectProductCategoryId); } if (input.DataObjectProductCategoryIds != null && input.DataObjectProductCategoryIds.Any()) { query = query.Where(x => input.DataObjectProductCategoryIds.Contains(x.ObjectProductCategoryId)); } if (!string.IsNullOrWhiteSpace(input.DataObjectProductCategoryName)) { query = query.Where(x => x.ObjectProductCategory.Name.Contains(input.DataObjectProductCategoryName)); } return(query); }
/// <summary> /// Получить список. /// </summary> /// <param name="input">Ввод.</param> /// <returns>Задача с полученными данными.</returns> public async Task <ModProductBaseJobListGetOutput> GetList( ModProductBaseJobListGetInput input ) { var result = new ModProductBaseJobListGetOutput(); using (var source = CreateDbContext()) using (var sourceOfTotalCount = CreateDbContext()) { var queryOfItems = source.Product .Include(x => x.ObjectProductCategory) .Include(x => x.ObjectsProductProductFeature) .ModProductBaseExtApplyFiltering(input) .ModProductBaseExtApplySorting(input) .CoreBaseCommonModExtApplyPagination(input); var queryOfTotalCount = sourceOfTotalCount.Product .ModProductBaseExtApplyFiltering(input); var taskOfItems = queryOfItems.ToArrayAsync(); var taskOfTotalCount = queryOfTotalCount.CountAsync(); await Task.WhenAll(taskOfItems, taskOfTotalCount).CoreBaseExtTaskWithCurrentCulture(false); result.Items = taskOfItems.Result.Select(x => CreateItem(x)).ToArray(); result.TotalCount = taskOfTotalCount.Result; if (result.Items.Any()) { var idsProductFeature = result.Items .Where(x => x.ObjectsProductProductFeature != null) .SelectMany(x => x.ObjectsProductProductFeature) .Select(x => x.ObjectProductFeatureId) .Distinct() .ToArray(); if (idsProductFeature.Any()) { var lookupOfProductFeature = await source.ProductFeature .Where(x => idsProductFeature.Contains(x.Id)) .ToDictionaryAsync(x => x.Id) .CoreBaseExtTaskWithCurrentCulture(false); if (lookupOfProductFeature.Any()) { foreach (var item in result.Items) { if (item.ObjectsProductProductFeature != null) { InitItemProductFeature(item, lookupOfProductFeature); } } } } } } return(result); }
) BuildActionListGet(ModProductBaseJobListGetInput input) { var job = AppJobListGet; Task <ModProductBaseJobListGetOutput> execute() => job.Execute(input); void onSuccess(ModProductBaseJobListGetResult result) { job.OnSuccess(ExtLogger, result, input); } void onError(Exception ex, ModProductBaseJobListGetResult result) { job.OnError(ex, ExtLogger, result); } return(execute, onSuccess, onError); }
public async Task <IActionResult> Get([FromQuery] ModProductBaseJobListGetInput input) { var result = new ModProductBaseJobListGetResult(); var(execute, onSuccess, onError) = MyModel.BuildActionListGet(input); try { result.Data = await execute().CoreBaseExtTaskWithCurrentCulture(false); onSuccess(result); } catch (Exception ex) { onError(ex, result); } return(Ok(result)); }
/// <summary> /// Мод "Product". Основа. Расширение. Применить. Сортировку. /// </summary> /// <param name="query">Запрос.</param> /// <param name="input">Ввод.</param> /// <returns>Запрос с учётом сортировки.</returns> public static IQueryable <DataEntityObjectProduct> ModProductBaseExtApplySorting( this IQueryable <DataEntityObjectProduct> query, ModProductBaseJobListGetInput input ) { var sortField = input.DataSortField.ToLower(); var sortDirection = input.DataSortDirection.ToLower(); switch (sortField) { case "id": switch (sortDirection) { case "asc": query = query.OrderBy(x => x.Id); break; case "desc": query = query.OrderByDescending(x => x.Id); break; } break; case "name": switch (sortDirection) { case "asc": query = query.OrderBy(x => x.Name); break; case "desc": query = query.OrderByDescending(x => x.Name); break; } break; case "price": switch (sortDirection) { case "asc": query = query.OrderBy(x => x.Price); break; case "desc": query = query.OrderByDescending(x => x.Price); break; } break; case "description": switch (sortDirection) { case "asc": query = query.OrderBy(x => x.Description); break; case "desc": query = query.OrderByDescending(x => x.Description); break; } break; case "objectproductcategory": switch (sortDirection) { case "asc": query = query.OrderBy(x => x.ObjectProductCategory.Name); break; case "desc": query = query.OrderByDescending(x => x.ObjectProductCategory.Name); break; } break; } if (!string.IsNullOrWhiteSpace(sortField) && sortField != "id") { query = ((IOrderedQueryable <DataEntityObjectProduct>)query).ThenBy(x => x.Id); } return(query); }