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));
Другие вопросы по тегам