2013-07-21 4 views
1

나는이 isActive == 사실특수 엔티티는 어떻게 포함될 수 있습니까?

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

DB 구조

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

좀 더 자세한 내용을 알려주시겠습니까? (모든) 마법사가 아니 었습니다. – Thousand

+0

Employee 테이블이 OrganizationPositions 테이블과 조인 됨 OrganizationPositions.EmployeeID = Employee.ID에서 Employee에 OrganizationPositions를 포함하려고합니다. 그러나 IsActive 필드가 true 인 레코드 만 – Masoomian

+3

@Masoomian 관련 엔티티의 일부만로드 할 수 있습니다. 조인 및 가져 오기 데이터를 직접 입력하거나 모든 관련 항목을 포함 –

답변

1

Include 지정된 관계에 대한 모든 개체를로드 할 때 모든 관련 OrganizationPositions를 포함합니다. 조건에 따라 일부 엔터티를 필터링 할 수 없습니다. 당신은 수동을 수행하여 개체를 필터링 할 수 있습니다

가입 :

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을 반환했습니다. 직원 유형이 필요합니다. – Masoomian

+0

@Masoomian 유감스럽게도 쿼리에서 employee를 생성하려고하면 Linq to Entities 쿼리에서 Employee 엔티티를 생성 할 수 없다는 오류가 표시됩니다. 여기서 옵션은 익명의 타입을 얻고 그것을 클라이언트 측의 엔티티로 매핑합니다. –

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

친애하는 Amin. 사실이지만이 코드는 데이터베이스에서 'OrganizationPositions'를 모두 가져온 다음 제거합니다. – Masoomian