使用LINQ连接两个表并将多个记录作为一行返回

时间:2012-01-31 20:47:31

标签: linq join

我正在尝试编写一个LINQ表达式,它将连接两个表并以类似于使用MySql的GROUP_CONCAT的格式返回数据。我尝试在Google和SO上搜索,但我发现的所有结果都使用MSSQL或只使用一个表。我现在写的表达式如下:

from d in division
join o in office on d.Id = o.DivisionId
select new
{
    id = d.Id,
    cell = new string[] { d.DivisionName, o.OfficeName }
}

正如预期的那样,这将返回每个部门的列表以及与该部门对应的办事处。唯一的问题是,由于大多数部门都有一个以上的办公室,我会为该部门的每个办公室找一个部门。基本上我看到这样的结果:

Division1: Office1
Division1: Office2
Division1: Office3
Division2: Office1

当我想看时:

Division1: Office1, Office2, Office3
Division2: Office1    

我记得前一段时间用MySql做了一些使用GROUP_CONCAT的事情,但是我无法弄清楚使用LINQ的等价物。我尝试编写一个具有IEnumerable<Office>参数并使用Aggregate扩展方法构建字符串的方法,但是我现在编写LINQ表达式的方式,每个Office都被传入而不是{{1 }}。有没有比我现在正在做的更好的方法来解决这个问题?我对LINQ表达式比较陌生,所以如果这很简单,我会道歉。

1 个答案:

答案 0 :(得分:3)

您想要群组加入,例如

from d in division
join o in office on d.Id = o.DivisionId into offices
select new
{
    id = d.Id,
    divisionName = d.DivisionName,
    officeNames = offices.Select(o => o.OfficeName)
}