以lat/long开头的Linq Sql查询

本文关键字:Linq Sql 查询 开头 lat long | 更新日期: 2023-09-27 17:50:58

我在数据库中有一个纬度列,它的值看起来像这样41.230524,使用HTML5地理定位我得到一个更准确的纬度,它看起来像这样41.230524081

我想在我的数据库中找到最接近从地理位置返回的纬度的行。我在想

var myCity = db.zipcodes.Where(x => LatFromGeoCode.StartsWith(x.Latitude)).FirstOrDefault();

问题是数据库中可能有不同的城市以41.2XXXXX开头,我不只是想要第一个,我想要最接近的匹配

我在想也许一个循环首先尝试匹配完整的LatFromGeo,然后-1字符,然后再试一次,似乎必须有一个更好的方法

以lat/long开头的Linq Sql查询

求数学差最小的那一个:

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 to sql,无法快速写出来)

如果有人想转换它,下面是SQL:

SELECT TOP 1 zipcode
FROM zipcodes z
WHERE ABS(z.Latitude - @LatFromGeoCode) = MIN(ABS(z.Latitude - @LatFromGeoCode))