Es una pregunta simple pero estoy comenzando con EF y no sé:

Tengo dos clases (objetos db):

Compañía (simplificada)

public class Company
{
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<UserGroup> UserGroups { get; set; }    
}

Y userGroup (hay muchos usuarios en el grupo):

public class UserGroup
{
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }
    public virtual ICollection<Company> Companies { get; set; }
}

En el controlador, necesito seleccionar las empresas que tienen un UserGroupID específico. No sé cómo escribir la condición de selección. Me refiero a algo como:

        var currentUser = db.Users.Find(User.Identity.GetUserId());
        var companies = db.Companies
            .Include(c => c.Address)
            .Include(c => c.User)
            .Where(c => c.UserGroups == currentUser.UserGroup)
            ;
0
Petr 14 feb. 2015 a las 02:18

2 respuestas

La mejor respuesta

Sería útil ver su clase ApplicationUser, pero supongo que tiene una propiedad de navegación para UserGroup. Si es así, puedes hacerlo así:

db.Users.Where(u => u.Id == User.Identity.GetUserId())
  .SelectMany(u => u.UserGroups)
  .SelectMany(g => g.Companies)
  .Distinct();
1
Klaus Byskov Pedersen 13 feb. 2015 a las 23:25

Me gusta escribir la cláusula where sobre la entidad que quiero devolver. En tu caso:

db.Companies.Where(c => c.UserGroups.Any(g => g.ID == currentUser.UserGroup.ID));

De esta manera, no es necesario agregar Distinct ().

1
Augusto Barreto 14 feb. 2015 a las 01:18