我需要你的帮助,在过去的两天里,我一直在尝试解决 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
的款项。
有人可以帮我吗?
问候...
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();