2015-05-05 36 views
3

我有一個表是這樣的:什麼是Linq lambda表達式(GROUP_CONCAT)中的XML PATH和Stuff的等價物?

EmployeeId EmployeeName ItemName 
4   Ganesh  Key Board 
4   Ganesh  Processor 
1   Jignesh  Key Board 
1   Jignesh  Mouse 
1   Jignesh  Processor 
3   Rakesh  Key Board 
2   Tejas  Key Board 
2   Tejas  Mouse 
2   Tejas  Processor 

我需要查詢這彷彿是ITEMNAME不同的相同employeeidemployeename我們應該有項目,如「」分開。

喜歡的人這是如下:

EmployeeId EmployeeName ItemName 
1   Jignesh  Key Board, Mouse, Processor 
2   Tejas  Key Board, Mouse, Processor 
3   Rakesh  Key Board 
4   Ganesh  Key Board, Processor 

這裏是SQL查詢此: OPs Screen Scrape of STUFF hack which I couldn't OCR

誰能幫我轉換上述SQL查詢到Lambda表達式?

+2

請用您在圖片中的文字更新您的問題。 –

回答

7

我假設你的意思是一個Linq語句(例如EF或Linq2Sql)Lambda expression

FOR XML PATHSTUFF示例顯示是一種解決辦法缺乏GROUP_CONCAT or LISTAGG in Sql Server

你並不需要在所有重現黑客在LINQ - 相反,只需加載所有行的目標集合到內存中,GroupBy所需的關鍵員工,然後在選擇投影使用String.Join

var result = db.EmployeeItems 
     // If you have a filter add the .Where() here ... 
     .GroupBy(e => e.EmployeeId) 
     .ToList() 
     // Because the ToList(), this select projection is not done in the DB 
     .Select(eg => new 
     { 
      EmployeeId = eg.Key, 
      EmployeeName = eg.First().EmployeeName, 
      Items = string.Join(",", eg.Select(i => i.ItemName)) 
     }); 

employeeItems是投影EmployeeItems之間的連接:

var employeeItems = new [] 
{ 
    new EmployeeItem{EmployeeId = 1, EmployeeName = "Ganesh", ItemName = "Keyboard"}, 
    new EmployeeItem{EmployeeId = 1, EmployeeName = "Ganesh", ItemName = "Mouse"}, 
    new EmployeeItem{EmployeeId = 2, EmployeeName = "John", ItemName = "Keyboard"} 
}; 

結果:

1 Ganesh Keyboard,Mouse 
2 John Keyboard 
+1

感謝StuartLC。 它的工作對我來說:-) –

+0

嗨@StuartLC 它讓我的工作謝謝:-) –

+0

但我得到的結果是: –

相關問題