0

我有一个书籍数据库。

ID                    TimesRead
1                     45
2                     12
3                     84
4                     1
5                     17
6                     65
7                     4
8                     98
9                     42
10                    14

我如何通过 linq 获得阅读次数最多的 5 本书?

在这种情况下,它会是id= 8,3,6,1,9

4

3 回答 3

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
于 2013-11-10T22:02:42.033 回答
1
from m in MyTable
orderby TimesRead descending
take 5
select m

或者

Mytable.OrderByDesc(x => x.TimesRead).take(5);
于 2013-11-10T12:05:24.203 回答
0

对从 DB 获得的 IEnumerable/IQueryable 结果使用 OrderByDescending() 和 Take() 扩展方法,然后使用 Select() 仅获取您需要的字段

于 2013-11-10T12:03:41.793 回答