2013-07-03 225 views
1

因此,我从人员表格中进行选择,并且需要选择该人员所在组的组ID。我该如何做到这一点。如何使用LINQ从数据库中选择多个项目

到目前为止,我有:

var p = (from p in Context.Person 
     join g in Context.Group 
     on p.PersonId equals g.PersonId 
     select new 
     { 
      Name = p.Name, 
      Age = p.Age, 
      groupIds = ????? 
     } 

所以分组表这将是GroupIdPersonId所以我需要选择所有的组ID主键。如何才能做到这一点?

回答

6

你想要一个GroupJoin而非Join。不同的是,而不是让所有展平为对列表中的相关项目的,它组中的所有接合物品进入的序列组成:

var query = from p in Context.Person 
      join g in Context.Group 
      on p.PersonId equals g.PersonId into groups 
      select new 
      { 
       Name = p.Name, 
       Age = p.Age, 
       groupIds = groups.Select(g => g.GroupId), 
      }; 

使用查询语法使用into关键字连同join将导致GroupJoin而不是Join

+0

据我了解@Pitfall希望groupIds,但你选择了PersonIds。我们不需要首先加入两个entityset,因为ObjectContext实体有主键。所以他们是唯一的在这个上下文就我 –

+0

@DavutGürbüz你从组中选择的内容足以改变,但是是的,我想他不希望使用人员ID。至于是否可以更好地进行联合与内部查询,已经完成了,它将取决于DB配置以及它如何最终优化每个查询。它可能会将你的查询转换成这样的结果,如果结果是可以比较的话,但如果结果不一致的话,它最终可能会反复对组进行大量查询,而不是仅仅将它们分组。你需要在他的数据上运行它们以查看哪个更适合。 – Servy

+0

在我的回答的第一评论中,他说他需要groupID。 'groupIds = groups.Select(g => g.GroupId),'Missing',' –

2

我在SO的编辑器上编码。如果我明白你想要人的团体。 否则请纠正我。

var p = from p in Context.Person   
    select new 
    { 
     Name = p.Name, 
     Age = p.Age, 
     groups = from g in Context.Group 
        where p.PersonId == g.PersonId 
        select g.GroupId 
    }; 
+0

我需要组ID,我知道如何根据您的示例获得,但是我立即得到语法错误,从“g in ....”中的所有内容都以红色加下划线并带有多个错误 – Pittfall

+0

Are you sure?我看到'var p =''可以是'('这个字母会导致错误,对于Id,我可以在编辑时选择ID字段,对于整个对象,你可以选择g本身 –

+0

@Pittfall Davut简直就是缺少'从'关键字开始内部查询 – Servy

相关问题