Linq查询筛选含特定code受益人的支付记录问题求助
Linq查询筛选含特定code受益人的支付记录问题求助
嗨,我来帮你梳理下这个问题~
你当前的查询核心问题在于:Include(b => b.beneficiaries.Where(c => c.code.Equals('08'))) 这个写法只是过滤了每个支付记录返回的关联受益人列表,但并没有对主表的Payement进行筛选——也就是说,只要status_request == 1的支付都会被查出来,只是它们附带的受益人只保留了code为08的那些,但你真正想要的是只获取状态为1,且至少关联了一个code为08的受益人的支付记录对吧?
修正后的查询写法
你需要在主查询的Where条件里,加上对Beneficiaires集合的判断,确保该支付存在符合条件的受益人,同时注意类型匹配的小细节(你的code是string属性,不能用单引号的char值'08',要改用双引号的字符串"08"):
List<Payement> payments = await _DbContext.Payements // 如果你需要同时加载符合条件的受益人,保留这个带过滤的Include .Include(p => p.Beneficiaires.Where(b => b.code == "08")) // 主筛选逻辑:状态为1,且关联的受益人中存在code为08的记录 .Where(p => p.status_request == 1 && p.Beneficiaires.Any(b => b.code == "08")) .Take(5) .ToListAsync();
额外的实体类优化建议
我注意到你的实体类有几个小问题,可能会导致EF Core映射报错,建议调整:
beneficiaires类里重复定义了ID属性(一个带[Key]标记,一个是重复的无标记属性),请删掉重复的那个;- 外键关联建议更清晰:在
beneficiaires里新增public int PayementID { get; set; },然后把[ForeignKey("PayementID")]标注在Payements导航属性上,避免EF Core识别关联关系出错; - 导航属性名尽量符合规范:比如
Payements应该改成Payement(一个受益人只属于一个支付),beneficiaries字段名建议和类名beneficiaires保持大小写一致(或者统一改成Beneficiaires)。
这样调整后,你的查询就能精准筛选出符合要求的支付记录啦~
备注:内容来源于stack exchange,提问作者Sylla
相关产品推荐
相关产品推荐

