2015-06-15 43 views
2

比方說,我有一個名爲details這些列的表:10最頻繁的價值 - LINQ to SQL的

product id = int 
product price = float 
products' category = nvarchar(50) 

此表沒有主鍵(或外鍵,如果這件事)。

我想執行一個查詢,以降序的方式返回一個包含10個最常見產品類別的字符串列表(產品最多的類別)。

如何執行此查詢?

回答

1

你可以嘗試這樣的事:

var tenMostFrequentCategories = products.GroupBy(product=>product.Category) 
             .OrderByDescending(grp=>grp.Count()) 
             .Select(grp=>grp.Key) 
             .ToList(); 

,我認爲products是您的數據上下文類。

+0

不應該是:'var tenMostFrequentCategories = products.GroupBy(product> =產品。類別) .OrderByDescending(grp> = grp.Count()) .SelectMany(grp> = grp.Key).Take(10) .ToList();'? – GVashist

+0

@Christos -is this query works if我用「db.getTable

()」替換「產品」?對不起,我是新來的linq-to-sql – rzarviv

+0

@rzarviv當然,它會工作的,沒有任何問題。 – Christos

1

這裏的SQL -

Select top 10 [Category], count(distinct productID) as NumProducts 
from details 
group by [category] 
order by count(distinct productID) desc 

group by將計算產品通過其類別,那麼top 10只返回十個最。如果有第十位的關係,它只會選擇一個 - 如果你需要它返回兩個,讓我知道。

+0

我忘了提及:我使用linq-to-sql :( – rzarviv

+0

好吧,對不起!您的sql-server標記混淆了 – APH