2010-01-19 4 views
1

J'essaie d'écrire une instruction LINQ qui sélectionne uniquement les lignes d'une table avec le rundate le plus récent. Par exemple, si j'avais une table avec des colonnes RunDate (datetime) et la valeur (décimal) une façon d'y parvenir par le biais sql pourrait ressembler à:Agréger dans where clause de LINQ

SELECT Value 
FROM Table 
WHERE RunDate = (SELECT MAX(RunDate) FROM Table) 

Est-il possible de le faire dans LINQ? Merci

Répondre

3

Si vous voulez que les lignes:

var rows = Table.Where(row => row.RunDate == Table.Max(r => r.RunDate)); 

Si vous voulez juste les valeurs:

var values = Table.Where(row => row.RunDate == Table.Max(r => r.RunDate)) 
        .Select(row => row.Value); 
+0

merci cela a fonctionné parfaitement ... je suis tout nouveau à LINQ si vous ne pouviez pas dire – Andrew

+0

Nous étions tous là à un moment donné. Nous ne reviendrons jamais tous. :-) – jason

0
Table.OrderByDescending(row=>row.RunDate).Take(1); 
+1

Je ne pense pas que ce soit la même chose ... qui ne rendre un enregistrement, même s'il y a plusieurs lignes avec la même date d'exécution. – Aaronaught