2015-06-15 5 views
2

Скажем, у меня есть таблица с именем details с этими столбцами:10 наиболее часто встречающееся значение в SQL столбце - LINQ к 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

Не должно быть:. 'Вар tenMostFrequentCategories = products.GroupBy (продукт> = product.Category) .OrderByDescending (grp> = grp.Count()) .SelectMany (grp> = grp.Key) .Take (10) .ToList(); '? – GVashist

+0

@Christos - этот запрос работает, если я заменяю «продукты» на «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 возвращает только десять наиболее. Если есть связи для 10-го места, он будет выбирать только один - если вам нужно, чтобы вернуть оба, сообщите мне.

+0

Я забыл упомянуть: я работаю с LINQ к SQL :( – rzarviv

+0

Хорошо, извините смутил ваш SQL-сервер тега – APH

Смежные вопросы