2011-09-28 60 views
5

我想使用DBContext SqlQuery執行一個原始的sql,然後包含相關的entites。我試過以下但它不加載相關實體: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僅適用於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

沒有直接回答,而不是寫原始SQL查詢,你可以使用類似這樣

_conext.Clients.Where(c => _conext.ActiveClients.Any(a => a.ClientId == c.Id));