2013-07-21 38 views
1

我想包括所有相關OrganizationPositions時IsActive ==真如何包含特殊的實體...?

this.ObjectContext.Employees.Include("OrganizationPositions") 

DB結構

Employee |  OrganizationPositions 
---------  ------------------------- 
ID    ID , EmployeeID , IsActive 
+0

您能否給我們多一點上下文?不是(全部)巫師。 – Thousand

+0

員工表與OrganizationPositions表連接在OrganizationPositions.EmployeeID = Employee.ID,我想在Employee包含OrganizationPositions,但只有IsActive字段爲真的記錄 – Masoomian

+3

@Masoomian您不能只加載相關實體的一部分 - 要麼加入和提取數據手動或包含所有相關實體 –

回答

1

Include將加載指定關係的所有實體。根據條件過濾出一些實體是不可能的。

您可以過濾掉手工做實體加盟:

from e in ObjectContext.Employees 
join op in ObjectContext.OrganizationPositions 
    on e.EmployeeID equals op.EmployeeID into g 
select new { 
    Employee = e, 
    ActivePositions = g.Where(x => x.IsActive) 
} 
+0

這是真的,但是這段代碼返回了AnonymousType.I需要Employee類型。 – Masoomian

+0

@Masoomian不幸的是,如果您嘗試在查詢中構造員工,您將看到Employee實體無法在Linq to Entities查詢中構造的錯誤。這裏的選項是獲取匿名類型並將其映射到客戶端的實體。 –

0

這是不可能的。但是,如果您正確聲明瞭導航屬性,並且您確實需要所告知的情況,則可以使用以下代碼:

//... 
// First, retrieve all Employees with navigation property 
var emps = new ObjectContext.Employees.Include("OrganizationPositions").AsQueryable(); 

// Then, clear OrganizationPositions of those that aren't active: 
foreach (Employee e in emps) { 
    if (e.IsActive != true) 
     e.OrganizationPositions.Clear(); 
} 
+0

謝謝親愛的阿明。確實如此,但此代碼從數據庫中提取所有'OrganizationPositions',然後刪除。 – Masoomian

相關問題