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

时间:2014-12-25 18:07:53

标签: c# linq

您好我使用顺序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未被添加)

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

使用FirstOrDefault而不是First,如果找不到任何元素,你将获得一个null对象。

使用lamda你可以写:

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

然后你得到null或(如果存在)第三高薪。