Desafortunadamente LINQ no proporciona un "máximo por un atributo" método. MoreLINQ lo hace con su operador MaxBy
, pero eso no se puede traducir a SQL, por supuesto. Entonces, si se trata de una consulta de LINQ a SQL (o lo que sea), necesitará un enfoque diferente. Si ya es LINQ a objetos, sin embargo:
return db.Exp.Where(rs => rs.ID == id)
.MaxBy(rs => rs.Amt)
.Received;
Tenga en cuenta que esto está haciendo lo que las palabras de su pregunta preguntan:
- Fuera de los registros con el identificador dado ...
- encontrar el uno con la cantidad más alta ...
- y comprobar el valor de
Received
Ésta es no lo mismo que:
- Fuera de los registros con el identificador dado, donde recibió es cierto ...
- encontrar el uno con la cantidad más alta
También tenga en cuenta que esto arrojará una excepción si hay registros no con esa ID.
Si desea hacerlo en LINQ a SQL, etc., probablemente estaría mejor con un ordenamiento:
var highest = db.Exp.Where(rs => rs.ID == id)
.OrderByDescending(rs => rs.Amt)
.FirstOrDefault();
return highest != null && highest.Received;
Usted No quiero hacer esto si está usando LINQ a Objetos, ya que ordenará todos los resultados, cuando solo desee encontrar el resultado con la cantidad más alta.
Agradable. Sospecho que la última parte debería ser 'x => x.Received', pero me gusta la forma en que maneja los resultados vacíos. –
@Joachim Isaksson - Me gusta la solución. Necesito agregar otra condición al .Any (x => x.Received == "Y" && x => x.División == "Contabilidad") pero no me deja hacerlo. Alguna idea de por qué. Tenga en cuenta que División no está en la tabla anterior. Me olvidé de incluirlo –
@NatePet Solo necesita incluir 'x =>' una vez en una lambda, por lo que debería ser '.Any (x => x.Received ==" Y "&& x.Division ==" Accounting ")' –