1

データベースに地理的な場所を含むテーブルがあります。ポイントに最も近い場所を見つける関数を書きたい。NHibernateでこれを試しました:

public Location GetClosestLocation(double latitude, double longitude)
{
    var closest = Session.QueryOver<Location>()
        .OrderBy(location => 
            (location.Latitude - latitude) + 
            (location.Longitude - longitude))
        .Asc.SingleOrDefault();

    return closest;
}

しかし、それは機能しません-ランタイムエラーが発生します。

最寄りの場所に戻るにはどうすればよいですか?NHibernateで簡単な機能の結果で注文することは可能ですか?

4

1 に答える 1

3

QueryOver がそのような式を理解できるとは思いません。ラムダ式の使用はプロパティの識別に限定されています。IProjection を受け取る OrderBy() のオーバーロードがあり、柔軟性が向上します。

LINQ を使用すると、試したのとほぼ同じコードを使用できるはずです。

var closest = Session.Query<Location>()
                     .OrderBy(location => 
                                 (location.Latitude - latitude) + 
                                 (location.Longitude - longitude))
                     .SingleOrDefault();
于 2013-01-31T12:50:11.737 に答える