Linq-to-EF avec décimales NULL et fonctions mathématiques

J'ai une table de cliniques dans SQL2008 qui a des colonnes décimales de latitude et de longitude nullables (nullable car je n'ai pas de coordonnées pour toutes les cliniques).

J'utilise Linq-to-EF et je voudrais calculer / sortinger les loggings par la distance d'un point donné.

Pour simplifier, disons que le calcul de la distance peut être:

√¯( (ClinicLat - PointLat) ^ 2 + (ClinicLng - PointLng) ^ 2 ) 

(Le premier symbole est destiné à être racine carrée)

Le plus proche je suis venu est:

 Math.Sqrt( Math.Pow((double)((c.Latitude ?? 0) - latNotNull), 2.0) + Math.Pow((double)((c.Longitude ?? 0) - lngNotNull), 2.0) ) 

Mais cela donne l'erreur:

 LINQ to Entities does not recognize the method 'Double Sqrt(Double)' method 

J'ai pensé utiliser un UDF mais EF Code First ne le permet pas. Je ne veux pas utiliser un proc stocké car je voudrais écrire la requête et la gérer dans le C #. Ai-je des options?

Utilisez les methods SqlFunctions.SquareRoot et SqlFunctions.Square :

 SqlFunctions.SquareRoot( SqlFunction.Square(c.Latitude - latNotNull) + SqlFunctions.Square(c.Longitude - lngNotNull) ) 

Ils seront transformés en appels de fonctions TSQL appropriés.

Vous ne devriez même pas avoir à faire la vérification null du tout.

sortinger les loggings par la distance

L'ordre des loggings sera le même sans la racine carrée.