LINQを使用してデータベースから近くの場所の一覧をASP.NET 2012で受信したいと考えています。LINQを使用してデータベースの近くの場所を検索
マイテーブルと偽データ:
PlaceId Name Latitude Longitude
1 A 18.1 20.1
2 B 18.2 20.2
3 C 18.3 20.3
1)我々のプロジェクトでは、クライアントの現在位置(緯度及び経度)が入力
2とする)サーバ側で、依存してクライアントの現在の場所、LINQを使用してデータベースから近くの場所を見つける必要があります
私が以前使用したSQLのコードはここにありますが、今は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
[しかし、問題は、LINQでこのようなクエリを作成する方法である。]
この上の私の仕事:
ソリューションを探している間、私はこのコード
に出くわしました 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();
しかし、問題は、ConversionHelperの参照方法またはその名前空間の問題です。
すべてのアドバイスをいただければ幸いです。
なぜストアドプロシージャを使用しないのですか?格納されたprocの結果を、テーブルをマッピングするのと同じ方法でオブジェクトにマップすることができます。 getClosePlaces_Result。 –
申し訳ありませんが、もしあなたが望むなら、戻り値の型が場所のリストであることを指定することができます。 –
@JuannStrauss明白なコード依存の結果とは別に、OPはC#でこれを行う方法を要求しています;-) –