2012-08-14 4 views
1

저는 지난 몇 시간 동안 해결하려고 노력했지만 문제가 있습니다.LINQ 유니언이 원하는 결과를 반환하지 않음

첫째, 내 데이터베이스 (그것의 단지 중요한 부분)처럼 보이는 방법을 보여 보자 enter image description here

[radno_mjesto] = JOB [grupa_radnih_mjesta] = JOB 그룹 (특정 그룹에 속하는 작업; 대법원 판사행정법 판사, 수석 판사) [osoba] = PERSON

: 예를 들어, 그룹 이름이 될 것이다이 그룹에 속하는 것 심사 위원 작업 인 경우

특정 작업 그룹에 속한 모든 사람들을 쿼리하는 것이지만 몇 시간 후에 성공할 수 없었습니다. 나는 다음과 같은 코드의 다양한 조합을 시도하고 있었고 내가 얻은 결과는 오직 두 가지 뿐이다 : 모든 사람들 (직업이 무엇이든 관계없이) 또는 특정한 직업만을 가진 사람들 (이 경우 작업 그룹의 마지막 직업) .

 var sveOsobe = from p in db.osobas 
         select p; 


     if (chkGrupaRadnihMjesta.Checked) 
     { 
      int id = Convert.ToInt32(GrupaRadnihMjesta.SelectedValue); 

      var radnaMjesta = from rm in db.grupe_radnih_mjesta_radna_mjesta 
           where rm.grm_id == id 
           select rm; 

      var praznoOsobe = sveOsobe.Where(o => o.osoba_id == -1); 

      foreach (var radnoMjesto in radnaMjesta) 
      { 
       var sveOsobeRadnaMjesta = from p in db.osobas 
              where p.osoba_id == -1 
              select p; 

       sveOsobeRadnaMjesta = sveOsobe.Where(o => o.rm_id == radnoMjesto.rm_id).Union(sveOsobeRadnaMjesta); 
       praznoOsobe = praznoOsobe.Union(sveOsobeRadnaMjesta); 
      } 
      sveOsobe = sveOsobe.Intersect(praznoOsobe); 
     } 

어떤 도움을 주시면 감사하겠습니다.

+2

귀하의 잘못은 아니지만 귀하의 언어에 익숙하지 않은 사람의 이름은 기억하기 어렵습니다. 대체 암호가 적용된 것 같습니다. 어쩌면 당신은 그들을 번역 할 수 있습니까? – usr

+3

데이터베이스에서 사용되는 LINQ 컨텍스트에서 똑같은 이름을 사용할 필요가 없다는 것을 알고 있으면 테이블과 열에 _meaningful_ 이름을 지정하고 여전히 난독 화 된 이름에 매핑 할 수 있습니다. 자신과 (그리고 우리) 부탁을하고 그렇게하십시오. 코드가하는 일을 이해하는 것은 대단히 어렵습니다. –

+0

사실,이 프로젝트는 제가 제 3 자로부터 물려받은 것입니다. 개인적으로 짧은 테이블 이름을 사용합니다. –

답변

1

이 작동합니다 ....

if (chkGrupaRadnihMjesta.Checked) { 
    int id = Convert.ToInt32(GrupaRadnihMjesta.SelectedValue); 
    var sveOsobe = (
    from p in db.osobas 
    join l in db.grupe_radnih_mjesta_radna_mjesta on l.rm_id equals p.rm_id 
    where l.grm_id == id 
    select p 
).Distinct(); 
} 

내가 여기에 이름에서 추측하고있어!

+0

감사합니다. 그게 해결책이었습니다! –

관련 문제