带 ICollection 条件的 Linq 查询

问题描述 投票:0回答:1

我需要你的帮助,在过去的两天里,我一直在尝试解决 Linq 查询...

这些是我的 DbSet 类:

public class Payement
{
    [Key]
    public int ID,
    public string a,
    public string b,
    public int status_request {get;set;}

    public ICollection<beneficiaires> Beneficiaires { get; set; } = new List<beneficiaires>(); 
}

受益人阶层:

public class beneficiaires
{
    [Key]
    public int ID { get; set; }
    public string a {get;set;}
    public string code {get;set;}
    [ForeignKey("ID")]
    public Payement Payements { get; set; } = null;
    public int ID { get; set;}
}

从上面的类中,一个付款可以有很多受益人,我想要的是只从受益人中选择具有特定代码的付款。

这是我的查询:

List<Payement> payments = 
    await _DbContext.Payements
                    .Include(b => b.beneficiaries.Where(c => c.code.Equals('08')))
                    .Where(p => (p.status_request == 1))
                    .Take(5)
                    .ToListAsync();

但是此查询正在使用

status_request = 1
支付所有款项,但我只想为代码为 08 的受益人支付
status = 1
的款项。

有人可以帮我吗?

问候...

c# entity-framework
1个回答
0
投票

where条件必须是

.Where(p => (p.status_request == 1) && p.beneficiaries.Any(c=>c.code.Equals('08')))

您在

Include
函数中包含的条件指示 EF 仅加载受益人中具有该条件的项目。如果您希望每笔付款的所有受益人都从
Include
中删除此条件。

Include中的Where条件

此代码返回过滤后的付款,每笔付款都有包含所有数据的受益人集合:

List<Payement> payments = await _DbContext.Payements
  .Include(b => b.beneficiaries) // don't add condition here
  .Where(p => 
      p.status_request == 1 &&    
      p.beneficiaries.Any(c=>c.code.Equals('08'))
  .Take(5).ToListAsync();

此代码返回相同的过滤付款,但对于每个付款,只加载代码等于 08 的受益人:

List<Payement> payments = await _DbContext.Payements
  .Include(b => b.beneficiaries.Where(c=>c.code.Equals('08'))
  .Where(p => 
      p.status_request == 1 &&    
      p.beneficiaries.Any(c=>c.code.Equals('08'))
  .Take(5).ToListAsync();
© www.soinside.com 2019 - 2024. All rights reserved.