2

私の場所から特定のマイル範囲に入る緯度経度を持つすべてのデータベースエントリを見つけようとしています。

私はこのstackoverflowの回答に基づいて回答しています:

MySQL 大圏距離 (Haversine 式)

ここに私が持っているものがあります:

                IQueryable<myTable> busLst = (from b in db.myTable
                                             where (3959 * Math.Acos(Math.Cos(radians(latLonRequest.lat)) * Math.Cos(radians(b.lat))
                                            * Math.Cos(radians(b.lon) - radians(latLonRequest.lon)) + Math.Sin(radians(latLonRequest.lat)) *
                                            Math.Sin(radians(b.lat)))) < latLonRequest.MaxDistance
                                             select b
                                            );

次のエラーが表示されます。

"errorCode": "NotSupportedException",
    "message": "LINQ to Entities does not recognize the method 'Double Acos(Double)' method, and this method cannot be translated into a store expression.",
    "stackTrace": "[GetByLatLonRequest: 6/24/2013 6:57:14 PM]:\n[REQUEST: {lat:3,lon:3,maxDistance:10,measureSystem:N}]\nSystem.NotSupportedException: LINQ to Entities does not recognize the method 'Double Acos(Double)' method, and this method cannot be translated into a store expression.\r\n   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate(ExpressionConverter parent,
4

2 に答える 2

1

これは、linq が関数を SQL に変換する方法を認識していないことを意味します。あなたがしなければならないことは、最初にデータを引き出してから、その上でロジックを実行することです:

IQueryable<myTable> busLst = (from b in db.myTable.AsEnumerable()
                                             where (3959 * Math.Acos(Math.Cos(radians(latLonRequest.lat)) * Math.Cos(radians(b.lat))
                                            * Math.Cos(radians(b.lon) - radians(latLonRequest.lon)) + Math.Sin(radians(latLonRequest.lat)) *
                                            Math.Sin(radians(b.lat)))) < latLonRequest.MaxDistance
                                             select b
                                            );

これにより、数学関数を実行する前に結果が列挙されます。

あなたのより良い賭けは、述語を構築することです: http://www.albahari.com/nutshell/predicatebuilder.aspx

于 2013-06-24T19:22:46.117 に答える