2010-08-06 72 views
8

給定一個表像聚合或加入字符串SQL查詢(SQL Server)的

ID | Name | City 
1 | X | Y 
2 | Z | Y 
3 | W | K 

我想產生像

ID | Description 
1 | Y (X, Z) 
3 | K (W) 

我想是這樣

From C In Clients Group C By C.ID, C.City _ 
Into G = Group Select New With {.ID = ID, .Description = City & _ 
" (" & (From C In Clients Select C.Name).Aggregate(Function(X, Y) X & ", " & Y) & ")"} 
結果

哪給了我一個錯誤「不支持查詢運算符」Aggregate「。」 也試過

From C In Clients Group C By C.ID, C.City _ 
Into G = Group Select New With {.ID = ID, .Description = City & _ 
" (" & String.Join((From C In Clients Select C.Name).ToArray, ", ") & ")"} 

這給了我「不支持轉換爲SQL」

所以,我怎麼能做到這一點的錯誤?

回答

21

我在C#中黑了,它似乎給你想要的。我會把你的翻譯轉到VB。

var clients = from c in context.Clients 
       group c by c.City into cities 
       select new { 
        ID = cities.First().ID, 
        City = cities.Key, 
        Names = string.Join(",", (from n in cities select n.Name).ToArray()) 
       }; 

foreach (var c in clients) { 
    Console.WriteLine(string.Format("{0}| {1} ({2})", c.ID, c.City, c.Names)); 
} 
+0

太棒了!我想知道爲什麼連接+連接不起作用,並單獨加入工作..去圖 – ariel 2010-08-07 07:14:34

+0

謝謝你。這就像一個魅力......對我來說,麻煩就是嵌入式查詢。 – Merritt 2012-03-07 19:31:37

+0

但是,你在客戶端做這是不想要的大多數情況下。 – 2017-06-28 14:50:35

0

該錯誤表示您的LINQ操作無法在TSQL中的SQL Server上執行,就像您編寫它一樣。

爲了實現您想要的功能,您必須儘可能多地選擇/評估基礎數據,然後在第二步中執行聚合。兩步或更多步驟的過程並不理想,但可以完成。