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

时间:2012-07-19 22:46:37

标签: c# linq entity-framework-4

鉴于一个组合清单,每个组都有一个单独的empresa,多个组合可以有相同的empresa,你如何获得包含任何列表组合的empresas?

我有这个型号:

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; }
}

所以这个方法给了我一个List

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相关的empres。

在emp下面给了一个bool,而我想要的是我的grupos列表中的所有empres。

List<Grupo> verEmpresa = VerEmpresas(1);

var emp = (from p in db.Empresas
           select p.Grupos).Contains(verEmpresa);       

ViewBag.empresa = new SelectList(emp, "id", "descripcion");

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在您的代码中,您传递的是“VerEmpresa”,这是一个Grupo列表。你应该从该列表中传递一个Grupo对象。尝试在verEmpresa列表中使用AnyAll方法。 尝试类似:

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

答案 2 :(得分:0)

如果你想要的只是empresas,请尝试:

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