Table commeLINQ Query ou une procédure stockée pour retourner la valeur maximale indiquée dans une colonne
datetime a1 b1 x2 ...
07-01-2009 13:10 8 9 10
07-01-2009 13:11 8 8 2
07-01-2009 13:12 9 1 1
1 ligne par seconde pendant une journée entière (= 86400 lignes); ~ 40 colonnes; tous le même format
Je suis à la recherche d'un moyen de récupérer une valeur maximale et l'heure à spécifier par une colonne.
Je suis à la recherche d'un moyen de récupérer une valeur maximale et l'heure à laquelle une colonne doit être spécifiée dans un laps de temps.
Quelque chose comme
Select top 1 time,a1 from table
where (datetime>=begin and datetime<end)
order by a1 desc
fonctionne, mais je ne peux pas utiliser la colonne en tant que paramètre.
Une solution LINQ ou un SP serait génial. Dois-je m'inquiéter de la performance lorsque je trie un ensemble de données pour récupérer une valeur maximale? Peut-être que la fonction MAX sera plus rapide.
MISE À JOUR
J'ai essayé de le mettre en œuvre la voie LINQ dynamique, comme Timothy (tvanfossen) a suggéré
Dim q2 = context.table _
.Where("t >= @0 AND t < @1", begin, end) _
.OrderBy("@0 desc", col) _
.Take(1) _
.Select(col)
mais cela retourne la première valeur de la table. Renvoie la première valeur de la période et non la valeur maximale. En regardant le profileur SQL, je vois qu'il n'y a pas de clause ORDER.
Une idée?
MISE À JOUR 2
Pour une raison quelconque, la valeur de substitution ne fonctionne pas dans la clause orderby.
.OrderBY (col + « desc ») fonctionne
@ Alex: Je pense que cela signifie l'ordre par doit être traité sur le client, LINQ to SQL ne sera pas en mesure de traduire en SQL. – Richard
@Richard: Bon point, je pense que tu as raison. –