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

标签 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 而不是 IEnumerable<Office> .有没有比我现在正在做的更好的方法来解决这个问题?我对 LINQ 表达式相当陌生,所以如果这很微不足道,我深表歉意。

最佳答案

你想要一个群组加入,例如

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)
}

关于linq - 使用 LINQ 连接两个表并将多个记录作为一行返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9086680/

相关文章:

mysql - SQL 计数查询的性能改进

MySQL select specific cols 比 select * 慢

c# - 如何创建一个 linq lambda 连接查询来提取结果,即使结果为空?

C# CopyToDataTable 方法不起作用

c# - 使用 linq 搜索 Xml 文档不会返回任何内容

c# - Linq Boolean 返回异常 DROPDOWNLIST 有一个无效的 SelectedValue,因为它不存在于项目列表中

mysql - 可以通过一个查询引用两个特定的表

mysql - 根据 MYSQL 中的名称查找行

mysql - 在Where 子句中使用/多个名称/值对进行SQL 查询

c# - 具有组和项目的 MongoDb C# 驱动程序使用 Aggregate() 查询给出异常