利用EF Core的Lambda表達式和Join進行多表聯動查詢


直接上干貨,利用EF Core的Lambda表達式和Join進行多表聯動查詢的實戰應用

        #region 獲取各個合作銀行的意向單中金融分期申請情況
        /// <summary>
        /// 獲取各個合作銀行的意向單中金融分期申請情況
        /// </summary>
        /// <returns></returns>
        public List<ReadyApplyStatisticsViewModel> GetReadyApplyStatistics(ReadyApplyStatisticsViewModel_Search searchmodel)
        {
            List<ReadyApplyStatisticsViewModel> list = new List<ReadyApplyStatisticsViewModel>();
            var banklist = db.N_LoanBank.Where(a => a.Sort != 0).OrderBy(a => a.Sort).ToList();
            foreach (var item in banklist)
            {
                ReadyApplyStatisticsViewModel model = new ReadyApplyStatisticsViewModel();
                model.BankName = item.BankName;
                var ReadyApplyQuery = db.N_LoanReadyApply.Where(a => a.BankId == item.BankId && a.CreateDate > searchmodel.ReadyApplyStartTime && a.CreateDate < searchmodel.ReadyApplyEndTime).AsQueryable();
                var ApplyQuery = db.N_LoanApply.Where(b => b.BankId == item.BankId && b.ApplyTime>searchmodel.ApplyStartTime && b.ApplyTime<searchmodel.ApplyEndTime).AsQueryable();
                if(searchmodel.BusinessType!=10)
                {
                    ApplyQuery = ApplyQuery.Where(b=>b.BusinessType==searchmodel.BusinessType);
                }
                if(!string.IsNullOrEmpty(searchmodel.ApplyChannel))
                {
                    ApplyQuery = ApplyQuery.Where(b=>b.ApplyChannel.Contains(searchmodel.ApplyChannel));
                }
                model.ReadyApplyCount = ReadyApplyQuery.Count();
                model.ApplyCount = ReadyApplyQuery.Join(ApplyQuery, a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.WaitAcceptCount = ReadyApplyQuery.Join(ApplyQuery.Where(b=>b.AcceptStatus==0 && b.CheckStatus == 0 && DateTime.Now <= b.AcceptExpiryTime), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.AcceptCount = ReadyApplyQuery.Join(ApplyQuery.Where(b => b.AcceptStatus == 0 && b.CheckStatus == 1), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.NotAcceptCount = ReadyApplyQuery.Join(ApplyQuery.Where(b => b.AcceptStatus == 2), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.CheckCount = ReadyApplyQuery.Join(ApplyQuery.Where(b => b.AcceptStatus == 1 && b.CheckStatus==1), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.NotCheckCount = ReadyApplyQuery.Join(ApplyQuery.Where(b => b.AcceptStatus == 1 && b.CheckStatus == 2), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.CancelCheckCount = ReadyApplyQuery.Join(ApplyQuery.Where(b => b.AcceptStatus == 1 && b.CheckStatus == 3), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.MoneyCheckCount = ReadyApplyQuery.Join(ApplyQuery.Where(b => b.AcceptStatus == 1 && b.CheckStatus == 1 && b.PaymentStatus==1 && b.MoneyCheckStatus==1), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                model.NotMoneyCheckCount = ReadyApplyQuery.Join(ApplyQuery.Where(b => b.AcceptStatus == 1 && b.CheckStatus == 1 && b.PaymentStatus == 1 && b.MoneyCheckStatus == 0), a => a.BidderNo, b => b.BidderNo, (a, b) => new { BidderNo = a.BidderNo }).Count();
                list.Add(model);
            }
            ReadyApplyStatisticsViewModel summodel = new ReadyApplyStatisticsViewModel();
            summodel.BankName = "總計";
            summodel.ReadyApplyCount = list.Sum(a => a.ReadyApplyCount);
            summodel.ApplyCount = list.Sum(a => a.ApplyCount);
            summodel.WaitAcceptCount = list.Sum(a => a.WaitAcceptCount);
            summodel.AcceptCount = list.Sum(a => a.AcceptCount);
            summodel.NotAcceptCount = list.Sum(a => a.NotAcceptCount);
            summodel.CheckCount = list.Sum(a => a.CheckCount);
            summodel.NotCheckCount = list.Sum(a => a.NotCheckCount);
            summodel.CancelCheckCount = list.Sum(a => a.CancelCheckCount);
            summodel.MoneyCheckCount = list.Sum(a => a.MoneyCheckCount);
            summodel.NotMoneyCheckCount = list.Sum(a => a.NotMoneyCheckCount);
            list.Add(summodel);
            return list;
        }
        #endregion

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM