7

我想使用 DBContext SqlQuery 执行原始 sql,然后包含相关实体。我尝试了以下方法,但它没有加载相关实体:

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();

有什么帮助吗?

4

2 回答 2

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 中产生内部连接,因此过滤器是非活动客户端。

于 2011-09-28T11:34:21.933 回答
1

不是直接的答案,而是你可以使用这样的东西而不是编写原始的 sql 查询

_conext.Clients.Where(c => _conext.ActiveClients.Any(a => a.ClientId == c.Id));
于 2011-09-28T10:27:42.710 回答