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

それは不可能。IncludeESQL または linq-to-entities でのみ機能します。これは、正しい SQL クエリを作成するためにクエリの作成中に処理する必要があるためです。この構築メカニズムに SQL クエリを渡すことはできません。Includeさらに、コードは SQL クエリをそのまま実行し、結果の列挙を呼び出そうとします。

簡単な 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 に答える