2013-11-10 3 views

ответ

0

Использование OrderByDescending() и Take() методы расширения для IEnumerable/IQueryable результаты вы получаете из БД, а затем использовать Select(), чтобы получить только поля, необходимые

1
from m in MyTable 
orderby TimesRead descending 
take 5 
select m 

Или

Mytable.OrderByDesc(x => x.TimesRead).take(5); 
+0

Need Descending man :) – LINQ2Vodka

+0

, а также действительно нужно выбрать ID, чтобы получить 8,3,6,1,9 –

+0

@CodeUniquely, вам нужно выбрать эти идентификаторы или вам нужна функция, чтобы получить 5 лучших книг? – AFetter

1

Пользователь ta.speot.is сделал очень умное замечание: как насчет связей? Или, что, если в книге № 10 также было 42 чтения (например, 9). Было бы несправедливо бросить его из лиги, не так ли? В самой крайней форме, что, если все книги имели одинаковое количество чтений?

Давайте предположим, что это пять высокий читает вы заинтересованы в Тогда вы должны группировать по TimesRead и сообщать о пяти самых высоких групп с их книгами (любое количество):.

var readGroups = from b in books 
       group b by b.TimesRead into readgroup 
       select new 
        { 
         TimesRead = readgroup.Key, 
         Books = string.Join(", ", readgroup.Select(b => b.Id)) 
        }; 
var highFive = readGroups.Take(5); 

это даст вам выход, как

98 8 
84 3 
65 6 
45 1 
42 9 

, но если 10 также было 42 гласит:

98 8 
84 3 
65 6 
45 1 
42 9, 10 

и если все было то же самое # гласит:

42 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
Смежные вопросы