给定一个项目列表,每个项目都包含一个子项目,获取子项目并删除重复项



给定一个groupo列表,其中每个groupo都有一个empresa,多个groupo可以有同一个empres,如何获得包含列表中任何groupo的empresa?

我有这个型号:

public class Grupo
{
    public int id { get; set; }
    public string descripccion { get; set; }
    [ForeignKey("Empresas")]
    public int empresa { get; set; }
    public virtual empresa Empresas { get; set; }
}

public class empresa
{    
    public int id { get; set; }
    public string descripcion { get; set; }
    public virtual ICollection<Grupo> Grupos { get; set; }
}

所以这个方法给了我一个列表

private List<Grupo> VerEmpresas(int userId)
{    
    var lista = (from ga in db.GrupoAccesos
    join g in db.Grupos
        on ga.grupo equals g.id
    where ga.usuario == userId
    select g).ToList();
    return lista;
}

现在我想用这个方法向我展示与grupo相关的企业。

下面的emp给出了一个bool,相反,我想要我的grupos列表中的所有empresa。

List<Grupo> verEmpresa = VerEmpresas(1);
var emp = (from p in db.Empresas
           select p.Grupos).Contains(verEmpresa);       
ViewBag.empresa = new SelectList(emp, "id", "descripcion");

您可以尝试从Grupo列表中获取企业ID,并使用外键关系获取企业ID:

var empresaIds = verEmpresa.Select( v => v.empresa ).Distinct().ToList();
var emp = from p in db.Empresas
          where empresaIds.Contains( p.id )
          select p;

在您的代码中,您正在传递'VerEmpresa',这是Grupo的列表。您应该从该列表中传递Grupo的一个对象。请尝试在verEmpresa List上使用AnyAll方法。试试类似的东西:

from p in db.Empresas
           where verEmpresa.Any(val => p.Contains(val))
           select p;

如果你只想要员工,请尝试:

var emp = (from e in db.Empresas
           from g in db.Grupos
           where e.Grupos.Contains(g)
           select e);

最新更新