Abe*_*Abe -1 c# linq linq-to-objects percentile
我有一个内存的Job对象列表,Job对象有一个名为Salary的属性.
如何使用LINQ或C#过滤此列表,仅包含薪水在前10名或后10名中的工作列表?
这是我的尝试,到目前为止似乎对我有用:
var tenthPercentileCount = allJobsCount / 10;
var top10PercentileJobs = allJobs
.OrderByDescending(j => j.Salary.SalaryAmount)
.Take(tenthPercentileCount)
.ToList();
var bottom10PercentileJobs = allJobs
.OrderBy(j => j.Salary.SalaryAmount)
.Take(tenthPercentileCount)
.ToList();
Run Code Online (Sandbox Code Playgroud)
首先,您需要计算10%的条目数.您可以通过将列表的大小除以10(并舍入或截断以获得整数)来完成此操作.我们把这个号码称为X.
接下来,你要订购清单通过在salaray 递减顺序.您需要获取列表中的前X个元素.这些将是前10%的.
要获得最低10%,您需要跳过前90%(您可以使用9X或从完整大小中减去X - 其中一个可能无法按预期工作),然后从列表中取出 X. 或者,您可以按工资订购清单并取第一个X.
它也有助于使用System.Linq命名空间.