【问题标题】:IncludeFilter in EntityFramework CORE-Plus not filtering the included recordEntityFramework CORE-Plus 中的 IncludeFilter 不过滤包含的记录
【发布时间】: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


【解决方案1】:

这部分看起来无效:

.IncludeFilter(a => a.Items.Where(a => a.IsActive))

你使用了两次无法编译的“a”。

也许是错误的,您当前正在检查 Factor 当前是否为 IsActive 而不是您的所有项目。

【讨论】:

猜你喜欢
  • 2011-07-09
  • 2017-09-22
  • 1970-01-01
  • 2014-03-23
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多