LINQ - 选择前10%的元素

时间:2017-06-25 21:25:47

标签: c# linq

使用LINQ我必须通过“Score”值选择List of ordered(asc)的前10%。该模型具有Id和分数。

示例:

如果我有100个项目且每个项目都有一个分数,我希望它们按分数(asc)排序,只选择前10名(10%)

到目前为止我做了什么:

var orderedList = (from Emps in db.Emps
                  orderby Emp.Score ascending
                  select Emp);

然后我必须计算orderedList并计算10%并进行另一次查询。 如果可能,我希望所有人都在同一个查询中。

我该怎么做?

1 个答案:

答案 0 :(得分:9)

您可以使用Take(int count)扩展名方法:

var result = values.OrderBy(t => t.Score).Take(values.Count * 10 / 100);

或者,如果您想要始终至少获得1个值,则可以使用Math.Ceiling

var result = values.OrderBy(t => t.Score).Take((int) Math.Ceiling(values.Count * 10 / 100d));