给定一个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上使用Any
和All
方法。试试类似的东西:
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);