【问题标题】:Where clause to related entity相关实体的 Where 子句
【发布时间】:2011-11-01 13:31:10
【问题描述】:

我有一个通用存储库模式,我正在尝试加载基于 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 表将该请求联系在一起。因为我不想每次引入新应用程序时都必须向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】:

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

    认为这就是你想要的:

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

    英文:

    获取所有代理,其中至少有一个应用代理已启用。

    如果你愿意:

    获取所有代理,其中 all AppAgency 已启用。

    Any 更改为All

    【讨论】:

    • 嗯,这真的很接近我的需要。我用更多信息更新了我的问题。不管怎样,你已经帮了我很大的忙。
    • @Jisaak - nps。虽然不太了解您想要什么查询,但不确定您为什么要过滤 FkAkencyId 以获取应用程序 ID。您不应该只过滤代理 PK 本身吗? (例如 AgencyId)
    • 哇,我想每天工作到很晚对我造成了伤害(这就是我的故事,我会坚持下去)。我定义的意思是将它与FkApplicationId 进行比较。我更改了where 子句,它运行良好。再次感谢!真的帮了我大忙。谢谢!
    • @Jisaak - 很高兴!很高兴你把它整理好了。
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2021-10-30
    • 2013-07-20
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多