2012-08-14 72 views
1

我有問題我一直在努力解決過去幾個小時,但沒有任何運氣。LINQ聯盟沒有返回想要的結果

首先,讓我告訴你我的數據庫看起來像(只是其中的一個重要組成部分): enter image description here

[radno_mjesto] = JOB [grupa_radnih_mjesta] =作業組(即屬於特定羣體的工作;例如,如果組名稱爲法官工作,將落入這個組是:最高法院法官行政法法官高級法官等) [osoba] = PERSON

我想實現的目標是查詢所有屬於特定工作組的人員,但幾個小時後我無法成功完成這項工作。我正在嘗試以下代碼的各種組合,而且我只得到2個結果:所有人員(無論他們的工作是什麼)或只有特定工作的人員(本例中來自工作組的最後一個工作) 。

 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 2012-08-14 22:27:32

+3

您知道您不需要在數據庫中使用的LINQ上下文中使用相同的確切名稱,您可以爲表和列_meaningful_名稱指定名稱,並仍映射到混淆的名稱。做你自己(和我們)一個忙,並做到這一點。甚至很難理解你的代碼在做什麼。 – 2012-08-14 22:37:20

+0

其實,這個項目是我從第三人繼承的東西。就我個人而言,我使用較短的表名。 – 2012-08-14 23:53:30

回答

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

謝謝,這是解決方案! – 2012-08-14 23:51:48