如何过滤子集合实体框架

时间:2016-08-19 19:41:45

标签: entity-framework linq asp.net-web-api

WEB API

型号::

public class Empresa
{
    [Key]
    public string CDEmpresa { get; set; }

    public string NomeFantasia { get; set; }

    [IgnoreDataMember]
    public string Nome{ get; set; }

    public List<EmpresaRamoAtividade> EmpresaRamoAtividade { get; set; }
}

public class EmpresaRamoAtividade
{
    [Key]
    public int CTRamoAtividade { get; set; }

    [IgnoreDataMember]
    public string CDEmpresa { get; set; }

    public List<RamoAtividade> RamoAtividade { get; set; }
}


public class RamoAtividade
{
    [IgnoreDataMember]
    [Key]
    public int CTRamoAtividadeTraducao { get; set; }

    public int CTRamoAtividade { get; set; }

    public string Atividade { get; set; }

    public int Idioma { get; set; }
}

控制器::

工作正常:::

{
    return db.Empresas
    .Where(a => a.Associado.IsAssociado)
    .Include(empresaRamo => empresaRamo.EmpresaRamoAtividade)
    .Include(ramo => ramo.EmpresaRamoAtividade.Select(atividade =>     atividade.RamoAtividade));
}       

不工作,我必须过滤&#34; idioma&#34; (语言):::

{
    return db.Empresas
    .Where(a => a.Associado.IsAssociado)
    .Include(empresaRamo => empresaRamo.EmpresaRamoAtividade)
    .Include(ramo => ramo.EmpresaRamoAtividade.Select(atividade => atividade.RamoAtividade.Where(idioma => idioma.Idioma == 1)));
}

错误:

  

Include路径表达式必须引用导航属性   在类型上定义。使用虚线路径进行参考导航   属性和集合导航的Select运算符   属性。参数名称:路径

我不能过滤3级收集孩子吗? 谢谢..

1 个答案:

答案 0 :(得分:1)

您无法使用Include方法进行过滤。它只支持选择。

免责声明:我是该项目的所有者Entity Framework Plus (EF+)

EF +查询IncludeFilter 可让您轻松过滤相关实体:

{
    return db.Empresas
    .Where(a => a.Associado.IsAssociado)
    .IncludeFilter(empresaRamo => empresaRamo.EmpresaRamoAtividade)
    .IncludeFilter(ramo => ramo.EmpresaRamoAtividade.Select(atividade => atividade.RamoAtividade.Where(idioma => idioma.Idioma == 1)));
}

您可以找到文档here