1

给定一个 groupos 列表,其中每个 groupo 有一个 empresa,多个 groupos 可以有相同的 empresa,你如何获得包含列表中任何 groupos 的 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; }
}

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

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

下面 emp 给出了一个布尔值,相反,我想要我的 grupos 列表中的所有 empresas。

List<Grupo> verEmpresa = VerEmpresas(1);

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

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

3 回答 3

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;
于 2012-07-20T00:07:55.070 回答
0

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

from p in db.Empresas
           where verEmpresa.Any(val => p.Contains(val))
           select p;
于 2012-07-19T23:50:20.697 回答
0

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

var emp = (from e in db.Empresas
           from g in db.Grupos
           where e.Grupos.Contains(g)
           select e);
于 2012-07-19T23:57:53.723 回答