【发布时间】:2020-08-12 22:01:52
【问题描述】:
将下面的 Linq 查询与 Entity Framework Core 3 和 EntityFramework Core Plus 库一起使用,我希望我会返回 1 Factor,其中所有项目的 IsActive 布尔值都设置为 true。相反,我得到的是 1 Factor 和 IsActive 值是真还是假的所有项目。 为什么?
public class Factor
{
public Factor()
{
Items = new List<Item>();
}
public bool IsActive{ get; set; }
public int FactorId { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
public class Item
{
[ForeignKey("Factor")]
public int? FactorId { get; set; }
public virtual Factor Factor { get; set; }
public bool IsActive{ get; set; }
public int ItemId { get; set; }
}
Factors
.IncludeFilter(a => a.Items.Where(b => b.IsActive))
.FirstOrDefault(a=>a.FactorId == 1140)
【问题讨论】:
-
请edit您的问题将您拥有的源代码包含为minimal reproducible example,其他人可以编译和测试。然后查看meta.stackoverflow.com/questions/333952/… 了解与 SQL 相关的问题。
-
您添加的代码不完整。但是,当我使用这些类并在可行的环境中构建它并运行它时,它可以正常工作。该库将生成如下查询:pastebin.com/hC3sskFP。如您所见,查询已正确生成。这很可能是一个上下文问题,您已经在上下文中拥有了您不想要的项目,EF 无论如何都会将它们添加到集合中,但是如果没有 MCVE,就很难说。请添加一个以确保。
标签: c# entity-framework-core-3.1 entity-framework-plus