所以我从人员表中选择,我需要选择该人所在群组的群组ID。我该怎么做。
到目前为止,我有:
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 = ?????
}
因此,在组表中,它将是GroupId
和PersonId
的主键,因此我需要选择所有组ID。怎么办呢?
答案 0 :(得分: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
。
答案 1 :(得分: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
};