zoukankan      html  css  js  c++  java
  • 利用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
  • 相关阅读:
    mybatis-generator自动生成代码时,只生成insert方法
    elasticsearch-head-master下运行npm install报npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
    fs.default.name和fs.defaultFS
    zookeeper集群为什么要是单数
    Quorom机制
    把数据库放入Docker是一个好主意吗?
    JVM GC算法CMS详解
    JVM之——CMS
    对于TCP/IP协议的三次握手和四次挥手的理解
    JVM G1和CMS
  • 原文地址:https://www.cnblogs.com/yechangzhong-826217795/p/12874813.html
Copyright © 2011-2022 走看看