Purtroppo LINQ non fornisce un "max da un attributo" metodo. MoreLINQ fa con il suo operatore MaxBy
, ma questo non può essere tradotto in SQL, ovviamente. Quindi, se questa è una query LINQ to SQL (o qualsiasi altra cosa), avrai bisogno di un approccio diverso. Se è già LINQ to Objects, però:
return db.Exp.Where(rs => rs.ID == id)
.MaxBy(rs => rs.Amt)
.Received;
Si noti che questo sta facendo quello che le parole della tua domanda chiedono:
- Fuori dei record con il dato id ...
- trovare quello con l'importo più elevato ...
- e verificare il valore di
Received
Questo è non lo stesso:
- Fuori i record con l'ID data in cui ha ricevuto è vero ...
- trovare quello con l'importo più elevato
noti inoltre che questo genererà un'eccezione se ci sono no record con quell'ID.
Se si vuole farlo in LINQ to SQL, ecc, si sarebbe probabilmente meglio fuori con un ordinamento:
var highest = db.Exp.Where(rs => rs.ID == id)
.OrderByDescending(rs => rs.Amt)
.FirstOrDefault();
return highest != null && highest.Received;
È non lo fanno vuole fare questo se si sta utilizzando LINQ agli oggetti, in quanto ordinerà tutti i risultati, quando si desidera solo trovare il risultato con l'importo più alto.
fonte
2012-02-22 21:42:17
Bello. Sospetto che l'ultima parte dovrebbe in realtà essere 'x => x.Received', ma mi piace il modo in cui questo gestisce i risultati vuoti. –
@Joachim Isaksson - Mi piace la soluzione. Devo aggiungere un'altra condizione a. Any (x => x.Received == "Y" && x => x.Division == "Accounting") ma non mi permette di farlo. Qualche idea sul perché. Nota che la divisione non è nella tabella sopra. Ho dimenticato di includerlo –
@NatePet Devi solo includere 'x =>' una volta in un lambda, quindi dovrebbe essere '.Any (x => x.Received ==" Y "&& x.Division ==" Contabilità ")' –