我在数据库中有一个纬度列,其值看起来像41.230524
,使用HTML5地理位置我得到一个更准确的纬度,看起来像41.230524081
我想在db中找到最接近Geolocation返回的Latitude的行。我在想像
var myCity = db.zipcodes.Where(x => LatFromGeoCode.StartsWith(x.Latitude)).FirstOrDefault();
问题是数据库中可能有不同的城市以41.2XXXXX开头,我不只是想要第一个,我想要最接近的匹配
我在考虑可能首先尝试匹配完整的LatFromGeo,然后是-1 char,然后再试一次,似乎必须有更好的方法
答案 0 :(得分:2)
找到数学差异最小的那个:
double minDiff = db.zipcodes.Min(x => Math.Abs(x.Latitude - LatFromGeoCode));
var myCity = db.zipcodes.Where(x => Math.Abs(x.Latitude - LatFromGeoCode) == minDiff).FirstOrDefault();
(有一种更好的方法可以使用压缩语法来实现这一点,但是我不知道linq对sql的了解是否足以快速写出来)
如果有人想转换它,那么这是SQL:
SELECT TOP 1 zipcode
FROM zipcodes z
WHERE ABS(z.Latitude - @LatFromGeoCode) = MIN(ABS(z.Latitude - @LatFromGeoCode))