2011-09-28 22 views
5

DBContext SqlQueryを使用してraw sqlを実行し、関連するentiteを含める必要があります。以下を試しましたが、関連するエンティティはロードされません。EF 4.1 - 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(); 

ヘルプがありますか?

答えて

5

のようなものを使用することができます。 Includeは、正しいSQLクエリを構築するためにクエリ構築中に処理する必要があるため、ESQLまたはlinq-to-entitiesでのみ機能します。この構築メカニズムに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

ない直接の回答が、代わりに生のSQLクエリを書くのあなたはそれが不可能である。この

_conext.Clients.Where(c => _conext.ActiveClients.Any(a => a.ClientId == c.Id)); 
関連する問題