2013-05-08 4 views
0

다음 코드에서 문제가있는 부분을 확인할 수 없습니다. 나는 특정 결원에 대한 책임감으로 임명 된 직원들을 회수하려고 노력하고 있습니다. 나는 내 DB에 약 20 개의 공석을 직원 16 명에게 할당하고 약 1801 개의 직원 기록을 직원 테이블에 할당했습니다. 코드는 항상 1801 개의 항목이있는 결과를 반환합니다. linq가 내부 조인 대신 왼쪽 외부 조인을 수행하는 경우

from emp in container.Employees 
join p in container.Vacancies 
on emp.EMPID equals p.ResponsibleOfficer into j 
group j by new {k1=emp.EMPID,k2=emp.NAME} into g 
select new { EmpId = g.Key.k1, Name = g.Key.k2 , Count = g.Count()} 

내가 어떤 도움이 많이 감사합니다이

select emp.EmpId,emp.Name,Count(*) as count 
from Vacancies p, Employees e 
where p.ResponsibleOfficer=e.EmpId 
group by e.EmpId,e.Name 

과 비슷한 무언가를 원한다. 감사합니다

+2

당신이 질문을 게시 할 때 미리보기에 주목, 멋지게 게시물의 형식을 시도하십시오. 불행한 들여 쓰기를 피하기 위해 쿼리를 편집했습니다. –

답변

1

당신은 join ... into을 사용하고 있습니다. 항상은 올바른 순서로 일치하는 항목이 없더라도 원래 시퀀스의 각 요소에 대해 단일 결과를 반환합니다.

당신은 where 절 사용 j에없는 요소가있는 항목을 필터링 할 수 있습니다

from emp in container.Employees 
join p in container.Vacancies 
on emp.EMPID equals p.ResponsibleOfficer into j 
where j.Any() 
group j by new {k1=emp.EMPID,k2=emp.NAME} into g 
select new { EmpId = g.Key.k1, Name = g.Key.k2 , Count = g.Count()} 

을 또는 당신은 단지 내부로 시작하는 조인을 사용 할 수 -하지만 난에 현재 그룹화 충분히 이해하지 못하는 당신이하려고하는 것을보십시오. 무엇 귀하의 group by 절은 무엇입니까?

편집 : 직원으로 그룹화하는 것이 실제로 필요한 경우 이미 수행하고있는 것입니다. 당신은 코드를 변경할 수 있습니다

from emp in container.Employees 
join p in container.Vacancies 
on emp.EMPID equals p.ResponsibleOfficer into j 
where j.Any() 
select new { Employee = emp, Count = j.Count()} 

기본적으로, 후 join 당신이 범위에서이 개 범위 변수있어 : emp ("현재"직원) 및 j (그 직원이 일치하는 모든 관련 공석을). 각 직원에 대해 j을 계산하려고하는 것입니까?

+0

좋아, 아마도 linq 충분히 이해가 안 돼요. 나는 각 조합의 공석을 셀 수 있도록 그룹을 사용하여 EMPID와 NAME의 결과를 그룹화합니다. 그렇게 생각합니다. 왜 틀렸는 지, 어떻게 내부 조인을 쓸 수 있는지 설명해 주시겠습니까? 감사. 나는 사무실에서 한 번 대답 한 질문에 답을 표시 할 것이고, 집에서 리눅스로 이것을 테스트 할 수는 없다. – kfc

+0

@kfc : "조합"은 무엇을 의미합니까? 당신은 정말로 종업원별로 그룹화하지 않습니까? 어떤 경우에는'group by '이 전혀 필요 없습니다. 내가 편집 할게 ... –

+0

위대한. 내가 필요한 것. 나는 linq에 대해 더 읽을 필요가있다. 나는 내가 혼자서 그룹으로해야한다고 생각했다. 감사 – kfc

0

나는 람다를 사용하지만, 작동 해요 :

container 
    .Employees 
    .Join(container.Vacancies, l => l.EmpId, e => e.ResponsibleOfficer, (l, e) => new { l.EmpId, l.Name }) 
    .GroupBy(g => new { g.EmpId, g.Name }) 
    .Select(s => new { EmpId = s.Key.EmpId, Name = s.Key.Name, Count = s.Count() }); 
관련 문제