Соединение двух таблиц и возвращение нескольких записей в одну строку с помощью LINQ - PullRequest
3 голосов
/ 01 февраля 2012

Я пытаюсь написать выражение LINQ, которое объединит две таблицы и вернет данные в формате, аналогичном тому, который возможен при использовании GROUP_CONCAT в MySql. Я пытался искать в 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, поэтому прошу прощения, если это тривиально.

1 Ответ

3 голосов
/ 01 февраля 2012

Вы хотите групповое присоединение , например

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...