2011-10-15 32 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接口上的元素,它肯定是不需要的。你想要做什么? –