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

Zaj*_*ajn 3 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 }
}
Run Code Online (Sandbox Code Playgroud)

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

Division1: Office1
Division1: Office2
Division1: Office3
Division2: Office1
Run Code Online (Sandbox Code Playgroud)

当我想看的时候:

Division1: Office1, Office2, Office3
Division2: Office1    
Run Code Online (Sandbox Code Playgroud)

我记得不久前用 MySql 做了一些使用 GROUP_CONCAT 的事情,但我不知道使用 LINQ 相当于什么。我尝试编写一个具有IEnumerable<Office>参数并使用扩展方法构建字符串的方法Aggregate,但是按照我现在编写的 LINQ 表达式的方式,每个 Office 都会传入而不是IEnumerable<Office>. 有没有比我现在正在做的更好的方法来解决这个问题?我对 LINQ 表达式相当陌生,所以如果这是微不足道的,我深表歉意。

Jon*_*eet 5

您想要加入群组,例如

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)
}
Run Code Online (Sandbox Code Playgroud)