首页 > 其他分享 >Abp vNext : ApplicationService 复杂查询

Abp vNext : ApplicationService 复杂查询

时间:2023-10-13 14:01:28浏览次数:33  
标签:vNext outwarehouseRecordDto WhereIf outwarehouseRecord await Abp ApplicationServ

在 Abp 的 ApplicationService 中进行复杂查询示例:

    public virtual async Task<PagedResultDto<RawMaterialOutwarehouseRecordWithDetialsDto>> 
        GetRawMaterialOutwarehouseRecordListAsync(GetRawMaterialOutwarehouseRecodsInput input)
    {
        var query =
            from outwarehouseRecord in (await _rawMaterialOutwarehouseRecordRepository.GetQueryableAsync())
            join rawMaterial in (await _rawMaterialRepository.GetQueryableAsync())
                on outwarehouseRecord.RawMaterialId equals rawMaterial.Id 

            join leftFinishProduct in (await _finishProductRepository.GetQueryableAsync())
                on outwarehouseRecord.FinishProductId equals leftFinishProduct.Id into LeftJionFinishProduct
            from finishProduct in LeftJionFinishProduct.DefaultIfEmpty() // 左连接

            join leftOrder in (await _orderRepository.GetQueryableAsync())
                 on outwarehouseRecord.OrderId equals leftOrder.Id into LeftJionOrder
            from order in LeftJionOrder.DefaultIfEmpty() // 左连接
            select new
            {
                outwarehouseRecord,
                rawMaterialSerialNumber = rawMaterial.SerialNumber,
                rawMaterialName = rawMaterial.Name,
                finishProductSerialNumber = finishProduct != null ? finishProduct.SerialNumber : null,
                orderSerialNumber = order != null ? order.SerialNumber : null,
            };

        query = query
            .WhereIf(
                !input.Filter.IsNullOrWhiteSpace(),
                x => x.rawMaterialSerialNumber.Contains(input.Filter) ||
                    (x.rawMaterialName != null && x.rawMaterialName.Contains(input.Filter))
            )
            .WhereIf(!string.IsNullOrWhiteSpace(input.RawMaterialSerialNumber), x => x.rawMaterialSerialNumber == input.RawMaterialSerialNumber)
            .WhereIf(!string.IsNullOrWhiteSpace(input.RawMaterialName), x => x.rawMaterialName == input.RawMaterialName)
            .WhereIf(!string.IsNullOrWhiteSpace(input.FinishProductSerialNumber), x => x.finishProductSerialNumber == input.FinishProductSerialNumber)
            .WhereIf(!string.IsNullOrWhiteSpace(input.OrderSerialNumber), x => x.orderSerialNumber == input.OrderSerialNumber)
            .WhereIf(input.MaxOutwarehouseTime != null, x => x.outwarehouseRecord.OutwarehouseTime <= input.MaxOutwarehouseTime)
            .WhereIf(input.MinOutwarehouseTime != null, x => x.outwarehouseRecord.OutwarehouseTime >= input.MaxOutwarehouseTime)
            .WhereIf(input.MaxCreationTime != null, x => x.outwarehouseRecord.CreationTime <= input.MaxCreationTime)
            .WhereIf(input.MinCreationTime != null, x => x.outwarehouseRecord.CreationTime >= input.MinCreationTime)
            .WhereIf(input.MaxModifitionTime != null, x => x.outwarehouseRecord.LastModificationTime <= input.MaxModifitionTime)
            .WhereIf(input.MinModifitionTime != null, x => x.outwarehouseRecord.LastModificationTime >= input.MinModifitionTime);

        var queryResult = await AsyncExecuter.ToListAsync(query);

        var outhouseRecordDtos = queryResult.Select(x =>
        {
            var outwarehouseRecordDto = ObjectMapper.Map<RawMaterialOutwarehouseRecord, RawMaterialOutwarehouseRecordWithDetialsDto>(x.outwarehouseRecord);
            outwarehouseRecordDto.RawMaterialSerialNumber = x.rawMaterialSerialNumber;
            outwarehouseRecordDto.RawMaterialName = x.rawMaterialName;
            outwarehouseRecordDto.FinishProductSerialNumber = x.finishProductSerialNumber;
            outwarehouseRecordDto.OrderSerialNumber = x.orderSerialNumber;

            return outwarehouseRecordDto;
        }).ToList();

        var totalCount = await AsyncExecuter.CountAsync(query);

        return new PagedResultDto<RawMaterialOutwarehouseRecordWithDetialsDto>(
           totalCount,
           outhouseRecordDtos
       );
    }

标签:vNext,outwarehouseRecordDto,WhereIf,outwarehouseRecord,await,Abp,ApplicationServ
From: https://www.cnblogs.com/easy5weikai/p/17761919.html

相关文章

  • Abp Vnext
    AbpVnext-7.4扩展User表OpenIddictCli创建项目命令Quartz后台定时任务......
  • MAUI ABP 框架正式发布(.NET 7)
    介绍国内首个基于.NET7版本的MAUIABP框架正式发布!本套框架主要针对原.NET6版本的WPF/Xamarin.FormsABP框架升级。升级如下:.NET6版本升级至.NET7ABP7.3升级至ABP8.0Xamarin.Forms升级至MAUI.NET6版本的WPFABP现已升级至.NET7功能介绍与.NET6版本......
  • abp 框架使用自定义appsetings.json
    定义一个自定义的配置文件在调试配置中设置启动环境这里的值填入刚刚设置的配置文件appsetings.{配置文件名字}.json的配置文件名字启动即可系统启动时,首先会检查{配置文件名字}是否存在,存在的话使用appsettings.{配置文件名字}.json,不存在则使用appsettings.json(默认配......
  • abp.vnext笔记
    安装工具dotnettoolinstall-gVolo.Abp.Cli--version6.0创建项目abpnewTodoApp--version6.0.0配置数据库连接修改TodoApp.DbMigrator和TodoApp.Web项目的appsettings.json"ConnectionStrings":{//"Default":"Server=(LocalDb)\\MSSQLLocalDB;Da......
  • WPF ABP框架更新(2023-10月份)
    更新说明本次更新主要内容以下:优化UI显示样式,按钮、文字显示模糊、边距一致性更新Syncfusion版本框架版本升级至.NET7ABP版本升级至8.0......
  • 尝试用ColabPro训练深度学习模型
    Colab中使用.ipynb文件,即我们平时使用的JupyterNotebook文件来完成相关代码的执行。如果要训练模型,需要将模型封装成可以经过ipynb文件执行的形式。在具体的运行时类型中,可以选择不同的运行时,其中包含了可选的GPU和CPU。GPU中有V100、A100、T4这几种可以选择,在选择相应的资源连......
  • ubunt docker abp 框架 Dockerfile
    #Seehttps://aka.ms/customizecontainertolearnhowtocustomizeyourdebugcontainerandhowVisualStudiousesthisDockerfiletobuildyourimagesforfasterdebugging.FROMmcr.microsoft.com/dotnet/aspnet:7.0ASbase####SQLSERVERTLS版本问题####RUN......
  • Abp vNext 依赖注入
    文章目录介绍ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjectionnuget包)开发的。所以我们采用dotnet自带的注入方式也是支持的。由于ABP是一个模块化框架,因此每个模块都定义它自己的服务并在它自己的单独模块类中通过依赖注入进行......
  • Abp vNext 模块加载机制
    文章目录生命周期PreConfigureServices添加依赖注入或者其它配置之前ConfigureServices添加依赖注入或者其它配置PostConfigureServices添加依赖注入或者其它配置之后OnPreApplicationInitialization初始化所有模块之前OnApplicationInitialization初始化所有模块On......
  • ABP + Vue Docker 部署
    #!/bin/bashecho"Welcometodockerbuild"echo""echo""ABP_HOST="abp/host"ABP_NG="abp/ng"cd..echo"Buildingdockerimage$ABP_HOST..."#cd到aspnet-core目录,eg:cd/data/apb/#将aspnet-......