当前位置: 首页 > 编程语言 > C#

使用linq查找第二高薪水分享

时间:2023-04-10 11:01:31 C#

使用linq查找第二高薪水我有以下sql查询来查找第二高薪水。select*fromemployeeE1where(2)=(selectcount(distinct(E2.Salary))fromemployeeE2whereE2.Salary>E1.Salary)我想将其转换为Linq语句。我想你要问的是找到收入第二高的员工?如果是这样,它将类似于varemployee=Employees.OrderByDescending(e=>e.Salary).Skip(1).First();如果多个员工可能有相同的薪水,并且您想返回所有员工的IEnumerable,薪水最高为第二高:varemployees=Employees.GroupBy(e=>e.Salary).OrderByDescending(g=>g.Key).Skip(1).First();(感谢@diceguyd30建议后一种增强)您可以定义相同的比较器类,如下所示:相同的数据。如果(Object.ReferenceEquals(x,y))返回真;//检查是否有任何比较对象为空。如果(Object.ReferenceEquals(x,null)||Object.ReferenceEquals(y,null))返回false;返回x.薪水==y.薪水;}intIEqualityComparer.GetHashCode(Employeeobj){returnobj.Salary.GetHashCode();}#endregion}并像这样使用它:varoutval=lst.OrderByDescending(p=>p.Id).Distinct(newEqualityComparer()).Skip(1).First();或者没有平等比较(两个行):varlst2=lst.OrderByDescending(p=>p.Id).Skip(1);varresult=lst2.SkipWhile(p=>p.Salary==lst2.First().Salary).First();编辑:正如Ani所说,使用sql应该这样做:varlst=myDataContext.Employees.AsEnumerable();但是如果是商业软件,最好用TSQL或者用LINQ找别的linq方式,可以找第三个薪水最高的如下:以上是C#学习教程:用linq找第二个分享的所有内容最高薪水。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——//先用LINQ按salary排序,然后跳过first2,获取nextvarthirdHighestSalary=(fromnindb.Employeeorderbyn.salarydescendingselectn).distinct().skip(2).FirstOrDefault()//将结果写入控制台Console.WriteLine(ThirdHighestSalaryis:{0},thirdHighestSalary.Salary);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: