Marco de entidad y patrón de repositorio (problema con IQueryable)

Acabo de cambiar de Linq 2 SQL a Entity Framework, y veo algunos comportamientos extraños en EF con los que espero que alguien pueda ayudar. Intenté buscar en Google, pero no pude encontrar a otras personas con este mismo problema. Me he burlado de un escenario para explicar la situación.

Si trabajo directamente con un contexto EF, puedo hacer una selección dentro de una selección. Por ejemplo, esto se ejecuta perfectamente bien:

        // this is an Entity Framework context that inherits from ObjectContext
        var dc = new MyContext();

        var companies1 = (from c in dc.Companies
                          select new {
                              Company = c,
                              UserCount = (from u in dc.CompanyUsers
                                           where u.CompanyId == c.Id
                                           select u).Count()
                          }).ToList();

Sin embargo, si uso un patrón de repositorio donde el repositorio está devolviendo IQueryable (o incluso ObjectSet u ObjectQuery), obtengo una NotSupportedException (LINQ to Entities no reconoce el método 'System.Linq.IQueryable`1) ...

Aquí hay un ejemplo de mi repositorio:

public class Repository {
    private MyContext _dc;

    public Repository() {
        _dc = new MyContext();
    }

    public IQueryable<Company> GetCompanies() {
        return _dc.Companies;
    }

    public IQueryable<CompanyUser> GetCompanyUsers() {
        return _dc.CompanyUsers;
    }
}

// Estoy usando el repositorio dentro de otra clase (por ejemplo, en mi capa de Servicios)

        var repository = new Repository();

        var companies2 = (from c in repository.GetCompanies()
                          select new {
                              Company = c,
                              UserCount = (from u in repository.GetCompanyUsers()
                                           where u.CompanyId == c.Id
                                           select u).Count()
                          }).ToList();

El código anterior arroja una excepción NotSupportedException.

Me doy cuenta de que si hay una asociación entre Empresas y Usuarios de la Compañía, entonces simplemente puedo hacer esto y funcionará bien:

        var companies3 = (from c in repository.GetCompanies()
                          select new {
                              Company = c,
                              UserCount = (from u in c.CompanyUsers
                                           select u).Count()
                          }).ToList();

... pero mi ejemplo es solo una versión simplificada de un escenario más complicado en el que no tengo una asociación entre las entidades.

Entonces, estoy muy confundido por qué Entity Framework está lanzando la excepción NotSupportedException. ¿Cómo es que la consulta funciona perfectamente bien cuando estoy trabajando con el contexto EF directamente, pero no es compatible si estoy trabajando con IQueryable devuelto por otro método? Esto funcionó perfectamente bien con Linq 2 SQL, pero no parece funcionar en Entity Framework.

Cualquier idea sería muy apreciada.

Gracias por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta