2013-09-03 2 views
2

아래 데이터베이스 설정이 있습니다. 내가 성취하고자하는 바는 Worker 탭에서 작업자를 검색하고 그 결과 사용자가 다이어그램에 속하게 될 모든 BusinessAreas를 반환하는 것입니다. 나는 Lambda 표현식에서이를 수행하고 최상위 BusinessArea 엔티티를 반환하기를 희망합니다. 필요한 경우 직원을 확보하고 여러 프로세스를 통해 내가 원하는 수준까지 되돌릴 수 있지만 최상위 레벨에 도달 할 때까지 다른 수준으로 반복해야합니다.낮은 수준의 기준에 따라 최상위 엔티티를 얻으십시오

enter image description here

+1

지금까지 검색어는 무엇입니까? –

+0

불행히도, 나는 아직 그것을 가지고 있지 않습니다. 나는 이런 일을 할 수 있다고 생각 했었지만, 가능한 한 엔티티가가는 한 WorkersProcess의 끝에서 인텔 센스가 멈추기 때문에 나는 그걸로는별로 멀지 않았습니다. – Tyddlywink

+0

죄송합니다. 곧 입력하십시오 .. 내가 여기서 말한 것이 있습니다. WFE.Workers.Where (c => c.UserID == Environment.UserName) .Select (c => c.WorkerProcesses .....) – Tyddlywink

답변

2

단일 사용자에 대한 사업 영역을보고, 이런 걸 원하는 것 소리 :

var results = WFE.BusinessAreas 
    .Where(ba => ba.Processes 
     .Any(p => p.WorkerProcesses 
      .Any(wp => wp.UserId == "pmarshall"))); 

또는 쿼리 구문 :

var results = 
    from ba in WFE.BusinessAreas 
    where ba.Processes.Any(p => p.WorkerProcesses.Any(wp => wp.UserId == "pmarshall")) 
    select ba; 

또는 대안 :

var results = 
    from ba in WFE.BusinessAreas 
    from p in ba.Processes 
    from wp in p.WorkerProcesses 
    where wp.UserId == "pmarshall" 
    select ba; 

var results = 
    (from ba in WFE.BusinessAreas 
    from p in ba.Processes 
    from wp in p.WorkerProcesses 
    select new { ba, wp.UserId }) 
    .Distinct() 
    .ToLookup(x => x.UserId, x => x.ba); 

을 그리고 당신은 results["pmarshall"]을 사용하여 단일 사용자에 대한 결과를 액세스 할 수 있습니다 : 당신은 모든 사용자에 대해 모든 영역을 찾을하려는 경우

, 당신은 같은 것을 할 싶어.

+0

완벽합니다. 도움을 주셔서 대단히 감사합니다. – Tyddlywink