EF 4.1 - DBContext SqlQuery和Include

时间:2011-09-28 09:52:08

标签: entity-framework include dbcontext rawsql

我想使用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();

任何帮助?

2 个答案:

答案 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));