具有自定义联接的全局查询

时间:2019-11-11 08:26:17

标签: entity-framework-core

我想为需要使用自定义联接以使过滤器正常工作的实体建立自定义查询。我不能使用导航属性。 EF Core可以做到这一点,以及我如何构建全局查询过滤器。我不知道如何在HasQueryFilter()方法的参数中指定该联接

1 个答案:

答案 0 :(得分:0)

全局查询过滤器是可自动生成Where子句的谓词表达式。因此,它们不能包含对已过滤实体表的显式联接。他们可以通过导航属性引入隐式联接。

很快,如果您不能使用导航属性,则不能使用直接联接。

但是您可以使用相关子查询。例如:

public class EntityInfo
{
    public int Id { get; set; }
    public string EntityType { get; set; }
    public int EntityId { get; set; }
    public string Info { get; set; }
}

public class Foo
{
    public int Id { get; set; }
    public string Info { get; set; }    
}

,然后在OnModelCreating内:

modelBuilder.Entity<Foo>().HasQueryFilter(e => 
    this.Set<EntityInfo>().Any(ei => ei.EntityType == "Foo" && ei.EntityId == e.Id));