有条件包含在EF Core中

时间:2019-11-24 04:26:03

标签: c# asp.net entity-framework asp.net-core entity-framework-core

因此,在我的查询中,我有多个然后包括以包含所有相关数据。在上一个include语句中,我想添加一个条件,但是由于我的linq语句,我得到了一个无效的lambda表达式响应。

Class Sample1 
{
   public int Id { get; set; }
   public ICollection<Sample2> S2 { get; set;}
}
Class Sample2
{
   public Sample3 S3 { get; set; }
   public Sample1 S1 { get; set;}
}
Class Sample3
{
   public int Id { get; set; }
   public ICollection<Sample4> S4 { get; set;}
}
Class Sample4 
{
   public Sample3 S3 { get; set; }
   public Sample5 S5 { get; set;}
}
Class Sample5
{
   public int Id { get; set; }
   public bool isPresent { get; set;}
}

我需要的是查询样本1 时,我希望它包括样本3 之前的所有内容,但是如果Sample5.IsPresent < / strong>是真的。这是我正在发送的查询

var sample = await dbcontext.Sample1.Include(s1 => s1.S2).ThenInclude(s2 => s2.S3)
    .ThenInclude(s3 => s3.S4.Where(s4 => s4.S5.isPresent)).FirstOrDefaultAsync(s => s.Id==id);

我尝试使用 Any 代替 Where ,但是那也不起作用。 我真的很感谢任何帮助。我已经尝试过做一些有关相关问题的答案,但似乎没有用。

1 个答案:

答案 0 :(得分:2)

在Entity Framework Core中仍然没有选项,这是一个未解决的问题:

https://github.com/aspnet/EntityFrameworkCore/issues/1833

  

这几天前已添加到里程碑5.0.0中的待办事项列表中。

您应尝试使用Query Include Filter或类似的扩展名。否则,您可以将lambda与查询表达式混合使用。请参阅以下主题:EF Query With Conditional Include