1

各グループが単一のエンプレサを持ち、複数のグループが同じエンプレサを持つことができるグループのリストを考えると、リストのグループのいずれかを含むエンプレサをどのように取得しますか?

私はこのモデルを持っています:

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はブール値を示しますが、代わりに、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のオブジェクトを1つ渡す必要があります。verEmpresaリストでAnyandメソッドを使用してみてください。All次のようなものを試してください:

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

エンプレサだけが必要な場合は、次を試してください。

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 に答える