Se puede definir la clase igualmente comparador como bramido:
public class EqualityComparer : IEqualityComparer<Employee >
{
#region IEqualityComparer<Employee> Members
bool IEqualityComparer<Employee>.Equals(Employee x, Employee y)
{
// Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y))
return true;
// Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
return x.Salary == y.Salary;
}
int IEqualityComparer<Employee>.GetHashCode(Employee obj)
{
return obj.Salary.GetHashCode();
}
#endregion
}
y utilizarlo como abajo:
var outval = lst.OrderByDescending(p => p.Id)
.Distinct(new EqualityComparer()).Skip(1).First();
o hacerlo sin igualmente comparador (en dos líneas):
var lst2 = lst.OrderByDescending(p => p.Id).Skip(1);
var result = lst2.SkipWhile(p => p.Salary == lst2.First().Salary).First();
Editar: Como Ani dijo a trabajar con sql debería hacer: var lst = myDataContext.Employees.AsEnumerable();
, pero si es para software comercial, es mejor usar TSQL o encontrar otra forma de linq.
Usted quiere encontrar el empleado que tiene el segundo más alto salario? –
@Ian: Sí, quiero encontrar el segundo salario más alto utilizando Linq –