関数に式を書き込み、それをEFクエリに渡します。それは動作しません。しかし、Math.Pow(x、x)のような関数が機能します。どうして?自分の数式をクエリに直接組み込む必要がありますか?数式をエンティティフレームワークに渡す
var i = from u in Locations
where (SquareRoot(u.SomeField) < radius)
select u;
public double SquareRoot(double val)
{
return Math.Pow(val, 0.5);
}
しかし、これは動作します:
var i = from u in Locations
where (Math.Pow(u.SomeField, 0.5) < radius)
select u;
私が使用したい実際の式は、単純な四角よりもはるかに大きくなります。地球上の点間の距離などの公式。これが私がクエリから数式を抜き出して関数として使用するのが好きな理由です。
実際の式は次のようになります。
public double DistanceBetweenPoints(double centerLat, double centerLon, double pointLat, double pointLon)
{
const double sphericalValue = 69.1;
return Math.Sqrt((Math.Pow(sphericalValue*(pointLat-centerLat), 2)) + (Math.Pow(sphericalValue*(pointLon-centerLon)*Math.Cos(centerLat/57.3), 2)));
}
Math.Sqrt()とMath.CosはEFでサポートされていません。
ここでお手伝いできますか? 'Math.Pow(u.Latitude、0.5)'は実際に意味がありますか? – jason
私は式を簡略化しましたが、私が遭遇した問題は 'Math.Sqrt'はサポートされていませんでした。これはSquareRootと同じです。 –
私は、緯度の平方根が、特に半径と比較して意味のあるものであったことにちょっと驚いていましたが、実際に何かを使用していないという例を作り上げているようです。 – jason