var lat = 40.646667;
var lng = -83.608611;
var distance = 100;
var towns = Towns.Select(t => new {
TownId = t.TownID,
Name = t.Name,
State = t.State.Name,
Distance = (Math.Acos(
Math.Sin((lat * Math.PI / 180)) *
Math.Sin(((double)t.Latitude * Math.PI / 180)) +
Math.Cos((lat * Math.PI / 180)) *
Math.Cos(((double)t.Latitude * Math.PI / 180)) *
Math.Cos(((lng - (Double)t.Longitude) * Math.PI / 180))
) * 180 / Math.PI) * 60 * 1.1515 * 1.609344
}).ToList();
towns
.Where(t => t.Distance <= distance)
.OrderBy(t => t.Distance).Dump();
Comments