2011-09-28 16 views
5

Quiero ejecutar un sql en bruto usando DBContext SqlQuery y luego incluir entidades relacionadas. He intentado lo siguiente, pero no carga las entidades relacionadas:EF 4.1 - DBContext SqlQuery e Include

string sql = "Select * from client where id in (select id from activeclient)"; 
var list = DbContext.Database.SqlQuery<Client>(sql).AsQueryable().Include(c => c.Address).Include(c => c.Contactinfo).ToList(); 

¿Algún consejo?

Respuesta

5

No es posible. Include funciona solo con ESQL o linq-to-entities porque se debe procesar durante la creación de consultas para construir consultas SQL correctas. No puede pasar la consulta SQL a este mecanismo de construcción. Además, su código dará como resultado la ejecución de la consulta SQL tal como está y tratando de llamar al Include en la enumeración resultante.

También puede utilizar LINQ consulta sencilla para obtener su resultado:

var query = from c in context.Clients.Include(c => c.Address).Include(c => c.Contactinfo) 
      join ac in context.ActiveClients on c.Id equals ac.Id 
      select c; 

Esto debería producir combinación interna en SQL y por lo tanto el filtro son clientes no activos.

1

No es una respuesta directa, pero en lugar de escribir la consulta SQL en bruto que podría utilizar algo como esto

_conext.Clients.Where(c => _conext.ActiveClients.Any(a => a.ClientId == c.Id)); 
Cuestiones relacionadas