Where相关实体的条款

问题描述 投票:0回答:1

我有一个通用的存储库模式,我正在尝试加载基于FkApplicationId的代理商集合,如果它IsEnabled == true

我的模型看起来像这样:

我认为这很容易,但我不能创建一个where子句来过滤结果。我无法看到AppAgencies的属性写一个条件,这是我可以得到的:

public IEnumerable<Agency> GetAllEnabledAgencies(int applicationId)
{
    return _agencyRepository.GetMany(m => m.AppAgencies.//No Entity Properties are here);
}

从我从上面调用的存储库库:

public virtual IEnumerable<T> GetMany(Expression<Func<T, bool>> where)
{
    return _dbSet.Where(where).ToList();
}

谢谢RPM1984,解决方案:

代理商由多个应用程序使用,他们需要能够为每个应用程序启用/禁用每个应用程序。所以我使用AppAgency表将该req绑定在一起。因为我不想每次引入新的应用程序时都要向Agency实体添加新列。

public IEnumerable<Agency> GetAllEnabledAgencies(int applicationId)
{
     return _agencyRepository.GetMany(x => x.AppAgencies.Any(y => y.IsEnabled && y.FkApplicationId == applicationId));
}
entity-framework repository-pattern poco
1个回答
4
投票

没有实体属性,因为AppAgencies上的Agency属性是一个导航属性。

我想这就是你想要的:

public IEnumerable<Agency> GetAllEnabledAgencies(int applicationId)
{
    return _agencyRepository.GetMany(x => x.AppAgencies.Any(y => y.IsEnabled));
}

用英语讲:

获取所有代理商,其中至少启用了一个AppAgency。

如果你想:

获取启用所有AppAgency的所有代理商。

Any改为All

© www.soinside.com 2019 - 2024. All rights reserved.