2012-01-31 61 views
3

我正在嘗試編寫一個LINQ表達式,該表達式將以類似於使用MySql的GROUP_CONCAT的可能格式連接兩個表並返回數據。我嘗試在Google和SO上搜索,但是我發現使用MSSQL的所有結果或僅使用一個表。我現在寫的表達式如下所示:加入兩個表並使用LINQ將多個記錄作爲一行返回

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表達式很陌生,所以我很抱歉,如果這是微不足道的。

回答

2

您想要羣組加入,例如,

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

哇,約翰Skeet。謝謝回覆。我現在正在嘗試,我會告訴你它是如何工作的。 – Zajn 2012-01-31 21:02:02

+0

這在LINQ Pad中非常有用。它也適用於我的代碼,但不是返回實際的OfficeName,而是返回一個'System.Linq.Enumerable + WhereSelectEnumerableIterator'。我認爲這是我在處理從LINQ表達式返回的值時的一個錯誤。 – Zajn 2012-01-31 21:19:54

+0

@Zajn:你可能想用'officeNames = offices.Select(o => o.OfficeName).ToList()'或類似的東西 - 很難說不知道你在做什麼。無論如何,迭代辦公室名稱應該工作。 – 2012-01-31 21:22:34