2

データベースにLatitude列があり、このような値があります41.230524。HTML5ジオロケーションを使用すると、次のようなより正確なLatitudeが得られます。41.230524081

ジオロケーションから返された緯度に最も近いデータベース内の行を見つけたいと思います。私は次のようなことを考えていました

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

それに関する問題は、41.2XXXXXで始まるデータベースに異なる都市が存在する可能性があることです。最初の都市だけでなく、最も近い都市が必要です。

最初に完全なLatFromGeoに一致させようとし、次に-1文字を一致させてから、もう一度試行するループを考えていました。もっと良い方法があるはずです。

4

1 に答える 1

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 to sql については、すぐに書き出せるほどよくわかりません)

誰かが変換したい場合のSQLは次のとおりです。

SELECT TOP 1 zipcode
FROM zipcodes z
WHERE ABS(z.Latitude - @LatFromGeoCode) = MIN(ABS(z.Latitude - @LatFromGeoCode))
于 2013-01-08T17:03:00.427 に答える