我有一个书籍数据库。
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
。
答案 0 :(得分:1)
from m in MyTable
orderby TimesRead descending
take 5
select m
或者
Mytable.OrderByDesc(x => x.TimesRead).take(5);
答案 1 :(得分: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
如果所有人都有相同的#read:
42 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
答案 2 :(得分:0)
对从DB获取的IEnumerable / IQueryable结果使用OrderByDescending()和Take()扩展方法,然后使用Select()仅获取所需的字段