EF 4.1 - DBContext SqlQuery и включить
Я хочу выполнить сырой SQL с помощью DBContext SqlQuery, а затем включить связанные объекты. Я пробовал следующее, но он не загружает связанные объекты:
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();
Любая помощь?
2 ответа
Это невозможно. Include
работает только с ESQL или linq-to-entity, потому что он должен обрабатываться при построении запроса для построения правильного запроса SQL. Вы не можете передать SQL-запрос этому механизму построения. Более того, ваш код приведет к выполнению SQL-запроса как есть и попытке вызова Include
по приведенному перечислению.
Вы также можете использовать простой запрос linq, чтобы получить свой результат:
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;
Это должно привести к внутреннему объединению в SQL и, следовательно, к фильтру относятся неактивные клиенты.
Не прямой ответ, но вместо написания необработанного SQL-запроса вы можете использовать что-то вроде этого
_conext.Clients.Where(c => _conext.ActiveClients.Any(a => a.ClientId == c.Id));