我想使用DBContext SqlQuery执行原始sql,然后包含相关的entites。我已经尝试了以下但它没有加载相关的实体:
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();
任何帮助?
答案 0 :(得分:6)
这是不可能的。 Include
仅适用于ESQL或linq-to-entities,因为必须在查询构建期间处理它以构造正确的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 :(得分:1)
不直接回答,但不是编写原始SQL查询,而是可以使用类似这样的内容
_conext.Clients.Where(c => _conext.ActiveClients.Any(a => a.ClientId == c.Id));