我有一个通用的存储库模式,我正在尝试加载基于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));
}
没有实体属性,因为AppAgencies
上的Agency
属性是一个导航属性。
我想这就是你想要的:
public IEnumerable<Agency> GetAllEnabledAgencies(int applicationId)
{
return _agencyRepository.GetMany(x => x.AppAgencies.Any(y => y.IsEnabled));
}
用英语讲:
获取所有代理商,其中至少启用了一个AppAgency。
如果你想:
获取启用所有AppAgency的所有代理商。
将Any
改为All
。