使用LINQ/Lambda查找第N个最高工资的员工

xzlaal3s  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(134)

嗨,我用顺序Linq从员工那里获得第N高的薪水

var ThirdHighestSal = from vr in Employee.getAllEmployee()
                 group vr by vr.Salary into gr
                 orderby gr.Key descending
                 select( new {salary=gr.OrderBy(x=>x.Salary).Skip(2).First()});
        foreach (var sal in ThirdHighestSal)
        {
            Console.WriteLine("3rd highest sal is {0}",sal.salary);
        }

当我执行它时,它抛出异常
序列不包含任何元素(InvalidOperationException已取消处理)
有人能帮我查询一下吗?

5sxhfpxr

5sxhfpxr1#

使用FirstOrDefault而不是First,如果找不到元素,则会得到一个空对象。
使用lamda,您可以写:

var ThirdHighestSal = Employee.getAllEmployee().Select(x => x.Salary).Distinct().OrderByDescending(x => x).Skip(2).FirstOrDefault();

那么你得到的是null或者(如果存在的话)第三高的薪水。

dddzy1tm

dddzy1tm2#

var employees = Employees
    .GroupBy(e => e.Salary)
    .OrderByDescending(g => g.Key)
    .Skip(N-1)
    .First();

相关问题