数据分组,连接,筛选处理

var instock = _context.siger_project_preset_separeparttooling_inwarehouse.Where(a => a.projectid == ProjectId && a.status == (int)RowState.Valid);
            var outstock = _context.siger_project_preset_separeparttooling_outwarehouse.Where(a => a.projectid == ProjectId && a.status == (int)RowState.Valid);
            var purchasestock = _context.siger_project_preset_separeparttooling_purchasemanage.Where(a => a.projectid == ProjectId && a.status == (int)RowState.Valid && a.state == (int)RowState.Invalid);
            var stockBaseInfo = _context.siger_project_preset_separeparttooling.Where(a => a.projectid == ProjectId && a.status == (int)RowState.Valid);

            var groupPurchase = (from puc in purchasestock
                                 group puc by puc.sptoolingid into temp
                                 select new
                                 {
                                     sptoolingid = temp.Key,
                                     purnum = temp.Sum(a => a.purchasenum)

                                 }).ToList();

            var groupInstock = (from ins in instock
                                group ins by new { ins.sptoolingid, ins.storageid } into temp
                                select new
                                {
                                    sptoolingid = temp.Key.sptoolingid,
                                    storageid = temp.Key.storageid,
                                    instock = temp.Sum(a => a.num)
                                }).ToList();


            var groupOutstock = (from ous in outstock
                                 group ous by new { ous.sptoolingid, ous.storageid } into temp
                                 select new
                                 {
                                     sptoolingid = temp.Key.sptoolingid,
                                     storageid = temp.Key.storageid,
                                     outstock = temp.Sum(a => a.num)
                                 }).ToList();


            var groupResult = (from gins in groupInstock
                               join gous in groupOutstock on new { gins.sptoolingid, gins.storageid } equals new { gous.sptoolingid, gous.storageid }
                               into temp
                               from s in temp.DefaultIfEmpty()
                               select new
                               {
                                   sptoolingid = gins.sptoolingid,
                                   storageid = gins.storageid,
                                   stock = gins.instock - (s == null ? 0 : s.outstock)
                               }).ToList();


            var queryList = (from main in stockBaseInfo
                             join pur in groupPurchase.AsQueryable() on main.id equals pur.sptoolingid into purtemp
                             from pur in purtemp.DefaultIfEmpty()
                             join sto in groupResult.AsQueryable() on main.id equals sto.sptoolingid into stotemp
                             from sto in stotemp.DefaultIfEmpty()

                             select new ResponsePresetStockForDashboard
                             {
                                 name = main.sptoolingname,
                                 code = main.sptoolingcode,
                                 num = sto == null ? 0 : sto.stock,
                                 purnum = main.maxstorage - (sto == null ? 0 : sto.stock) - (pur == null ? 0 : pur.purnum),
                                 onwaynum = pur == null ? 0 : pur.purnum,
                                 minstorage = main.minstorage
                             });

            var count = queryList.Count();

            Expression<Func<ResponsePresetStockForDashboard, bool>> WarningDataExpression = q => true;
            if (count != 0 )
            {
                WarningDataExpression = q => q.num + q.onwaynum < q.minstorage;
            }

            var result = queryList.Where(WarningDataExpression).ToList();

            return result;

 

posted @ 2023-03-15 17:37  lixia64  阅读(16)  评论(0编辑  收藏  举报