如何获取含关联SaleMaster ID的逾期分期及对应SaleMaster实例?
获取逾期分期对应的SaleMaster实例
实体类定义
public class SaleMaster { public int Id { get; set; } public List<Installments> Installments { get; set; } } public class Installments { public int Id { get; set; } public decimal Amount { get; set; } public DateTime Month { get; set; } public bool IsPaid { get; set; } }
需求说明
需要获取所有逾期未付的Installments数据,同时包含关联的SaleMaster ID,并且基于已查询到的逾期分期列表获取对应的SaleMaster实例。当前已实现逾期分期查询:
List<Installments> instalment = con.DbSetInstallments .Where(x => x.Month < d && x.IsPaid == false) .ToList();
解决方案
首先,你的Installments实体缺少关联SaleMaster的外键字段,这是关联查询的基础,需要补充:
public class Installments { public int Id { get; set; } public decimal Amount { get; set; } public DateTime Month { get; set; } public bool IsPaid { get; set; } // 新增关联SaleMaster的外键 public int SaleMasterId { get; set; } // 可选:添加导航属性方便直接关联查询 public SaleMaster SaleMaster { get; set; } }
方式1:直接查询带SaleMaster ID的逾期分期
如果只需要逾期分期及其对应的SaleMaster ID,可直接在查询中投影:
var overdueInstallmentsWithSaleId = con.DbSetInstallments .Where(x => x.Month < d && x.IsPaid == false) .Select(x => new { Installment = x, SaleMasterId = x.SaleMasterId }) .ToList();
方式2:基于已有的逾期分期列表获取SaleMaster实例
如果已经有了instalment列表,可提取其中的SaleMaster ID集合,再批量查询对应的SaleMaster:
// 提取所有关联的SaleMaster ID(去重避免重复查询) var saleMasterIds = instalment.Select(x => x.SaleMasterId).Distinct().ToList(); // 批量查询对应的SaleMaster var relatedSaleMasters = con.DbSetSaleMaster .Where(sm => saleMasterIds.Contains(sm.Id)) .ToList();
方式3:一次性查询逾期分期及其关联的SaleMaster(推荐)
使用EF Core的Include方法,一次性加载逾期分期及其关联的SaleMaster,减少数据库查询次数:
var overdueInstallmentsWithSaleMaster = con.DbSetInstallments .Include(x => x.SaleMaster) // 加载关联的SaleMaster .Where(x => x.Month < d && x.IsPaid == false) .ToList(); // 提取所有关联的SaleMaster(去重) var relatedSaleMasters = overdueInstallmentsWithSaleMaster .Select(x => x.SaleMaster) .Distinct() .ToList();
内容的提问来源于stack exchange,提问作者Hammad Uppal
相关产品推荐
相关产品推荐

