2011-10-15 114 views
0

的LINQ到SQL需要重構如下發現:需要幫助使用Group By子句重構LINQ語句?

var query = from p in Cache.Model.Products 
       join sc in Cache.Model.ShishaCombinations on p.ProductID equals sc.ProductID 
       where sc.NumberOfMixes == mixes 
       select new { p.ProductID, p.Name }; 

與下列一行代碼:

group by p.ProductID 

我知道,任何需要SELECT子句GROUP BY遺漏所以無論可以一起生活在同一個LINQ-to-SQL語句中,那麼有人可以幫助我重構上述請求嗎?

爲了幫助我刪除結果中的任何重複數據。 < - 這是這個問題的全部內容。產品根據產品使用的香精的數量重複多次。因此,在「ShishaCombinations」表中,每種產品ID可能會重複使用一種產品ID多次。我想將從上面的查詢返回的結果分組或者根據不同的結果進行分組,因爲我不想將產品'n'次添加到我的GUI,因爲它在我的結果中顯示爲'n'次。希望這可以消除我想要做的任何混淆。

+0

真的不清楚你的意思是「To-SQL在重構下發現」。由於您需要NumberOfMixes屬性,因此您無法*只*組。 –

+0

(這可能會幫助你的問題更清楚,如果你顯示你試圖得到什麼結果。) –

回答

1

下面的代碼是我所需要的東西:

 var query1 = (from p in Cache.Model.Products 
        join sc in Cache.Model.ShishaCombinations on p.ProductID equals sc.ProductID 
        where sc.NumberOfMixes == mixes 
        select new { p.ProductID, p.Name }).Distinct(); 

Ufuk,謝謝回答伴侶。我知道我的答案是一個簡單的哈哈:)

0

您可以在select子句後使用into關鍵字。你不能只分組,因爲你正在投射一個匿名類型。

var query = from p in Cache.Model.Products 
       join sc in Cache.Model.ShishaCombinations on p.ProductID equals sc.ProductID 
       where sc.NumberOfMixes == mixes 
       select new { p.ProductID, p.Name } into productInfo 
       group productInfo by productInfo.productId; 
+0

似乎工作,但沒有喜悅?我完全理解你在答案中說了什麼,但即使沒有group by子句,你的查詢也會返回與我完全相同的結果? :S – IbrarMumtaz

+0

@IrrarMumtaz然後我猜你的ProductID列是唯一的ID,因此在該列上分組什麼也不做。既然你不使用IGrouping接口上的元素,它肯定是不需要的。你想要做什麼? –