2011-08-08 18 views
2

私はLinqとEntityの間に新しいことがあり、何か問題があります。Linqで数学的な計算を行う

ここに私の検索リポジトリがあります:

public static List<Centre> Search(Search search) 
{ 
    using (var context = new MeetingRoomsContext()) 
    { 
     var query = context.Centres 
       .Include("Geo") 
       .OrderBy(NEED HELP WITH THIS PART) 

     return query.ToList(); 
    } 
} 

私はこのような座標を含む検索対象取得しています:私はそれを破ると共同に対するいくつかの数学を行う必要があり

Search.LongLat = "(-6.265275, 53.334442)" 

を最初に検索されたポイントに最も近い結果を並べるために、DBの中の座標。

数学的な用語では、それは次のようになりピタゴラス:

squareRootOf((difference in latitude * difference in latitude) + 
      (difference in longitude * difference in longitude)) 

は本当にこれを行うにはどのような手掛かりいません。任意のヘルプを大いに感謝します

+2

Sql Server 2008には、このようなシナリオで役立つように構築された空間インデックス機能がありますが、EFでサポートされているとは思われません。 –

答えて

3

平方根はまったく必要ありません。距離の二乗による順序は距離によって発注と同じです:

.OrderBy(x => (x.Latitude - target.Latitude)*(x.Latitude - target.Latitude) 
       + (x.Longitude - target.Longitude)*(x.Longitude - target.Longitude)) 

このトリックは、多くの場合、多くの平方根を計算することを避けるために(例えば、ビデオゲームのような)衝突検出に使用されています。

0

どのようにピタゴラスの平方根を計算する独自のIComparerを実装するのですか? OrderByはそれを自動的に比較します。
例としてthis postを参照してください。

関連する問題