c# - LINQ - 选择前 10% 的元素

标签 c# linq

使用 LINQ,我必须选择按“分数”值排序 (asc) 的列表的前 10%。该模型有 Id 和 Score。

例子:

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

到目前为止我做了什么:

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

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

我该怎么做?

最佳答案

您可以使用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));

关于c# - LINQ - 选择前 10% 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44750790/

相关文章:

c# - Entity Framework : how to do correct "Include" on custom type

c# - Linq To Objects - 在连接的幕后

c# - Linq参数错误

c# - ForEach——你在哪里?

c# - JSON Post 我的 .NET MVC 2 Controller 需要什么参数

c# - C++ x86/x64 结构对齐 + .NET AnyCPU C++ 库使用(调用/回调)

c# - MVC 2 C# 中的 Html TextBoxFor 循环

c# - 将匹配多个批量输入的 LINQ 表达式

c# - 使用 LINQ 简化 foreach 循环(在每次迭代中选择两个对象)

c# - 从单元测试生成文档