Usando LINQ encuentra lugares cercanos desde la base de datos

Queremos recibir una lista de lugares cercanos de la base de datos utilizando LINQ en ASP.NET 2012 y nos gustaría recibir comentarios sobre nuestra estrategia.

Mi mesa y datos falsos:

     PlaceId    Name       Latitude   Longitude 
       1          A          18.1        20.1
       2          B          18.2        20.2
       3          C          18.3        20.3

1) En nuestro proyecto, la ubicación actual del cliente (latitud y longitud) se toma como entrada

2) En el lado del servidor, dependiendo de la ubicación actual del cliente, necesitamos encontrar lugares cercanos de la base de datos utilizando LINQ

Aquí está el código para SQL que usé anteriormente, pero ahora queremos usar LINQ.

SELECT  name, Latitude, Longitude , 
  ( 3959 * acos( cos( radians(?) )* cos( radians( Latitude) ) * cos( radians( Longitude ) - radians(?) ) 
 + sin( radians(?) ) * sin( radians( Latitude) ) ) ) AS distance 
FROM TABLE_NAME 
HAVING distance < ? 
ORDER BY distance LIMIT 0 , 20

[Pero la pregunta es cómo escribir dicha consulta en LINQ.]

Mi trabajo en esto:

Mientras buscaba la solución, encontré este código.

        var Value1 = 57.2957795130823D;
        var Value2 = 3958.75586574D;

        var searchWithin = 20;

    double latitude = ConversionHelper.SafeConvertToDoubleCultureInd(Latitude, 0),
          longitude = ConversionHelper.SafeConvertToDoubleCultureInd(Longitude, 0);

    var location = (from l in sdbml.Places
                    let temp = Math.Sin(Convert.ToDouble(l.Latitude) / Value1) *  Math.Sin(Convert.ToDouble(latitude) / Value1) +
                             Math.Cos(Convert.ToDouble(l.Latitude) / Value1) *
                             Math.Cos(Convert.ToDouble(latitude) / Value1) *
                             Math.Cos((Convert.ToDouble(longitude) / Value1) - (Convert.ToDouble(l.Longitude) / Value1))
                         let calMiles = (Value2 * Math.Acos(temp > 1 ? 1 : (temp < -1 ? -1 : temp)))
                         where (l.Latitude > 0 && l.Longitude > 0)
                         orderby calMiles
                        select new location
                             {
                                    Name = l.name
                                });
                        return location .ToList();

Pero el problema es cómo hacer referencia a ConversionHelper o a qué espacio de nombres viene.

Todos los consejos son apreciados.

Respuestas a la pregunta(2)

Su respuesta a la pregunta