EF 4.1 - DBContext SqlQuery и включить - PullRequest
       37

EF 4.1 - DBContext SqlQuery и включить

7 голосов
/ 28 сентября 2011

Я хочу выполнить сырой 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 ]

6 голосов
/ 28 сентября 2011

Это невозможно. 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 и, следовательно, к фильтру относятся неактивные клиенты.

1 голос
/ 28 сентября 2011

Не прямой ответ, но вместо написания необработанного SQL-запроса вы можете использовать что-то вроде этого

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