2012-08-14 73 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