c# - stored - Entity FrameworkのDbSet.SqlQueryメソッドにパラメータを渡す方法
sqlquery stored procedure parameters (2)
私はいくつかのパラメータを取る、Entity FrameworkでRAW SQL文を実行しようとしています。 私が使用しているメソッドはDbSet.SqlQueryからDbSet.SqlQuery
私はparamsオブジェクト配列を構築する方法を混乱させる:params object [] parameters
これは私のコードブロックです:
public ActionResult APILocation(string lat, string lng)
{
string SQL = "select * from (select Distance = ((ACOS(SIN(@lat * PI() / 180) * SIN(lat * PI() / 180) + COS(@lat * PI() / 180) * COS(lat * PI() / 180) * COS((@lng - Long) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) from dbo.Stores) t where Distance < 10 order by Distance asc";
ObjectParameter latParam = new ObjectParameter("lat", lat);
ObjectParameter lngParam = new ObjectParameter("lng", lng);
object[] parameters = new object[] { latParam, lngParam };
var stores = db.Stores.SqlQuery(SQL, parameters);
return Json(stores, JsonRequestBehavior.AllowGet);
}
ObjectParameterを作成してオブジェクト配列に配置しようとしましたが、うまくいきませんでした。 誰かがparamsオブジェクト[]のパラメータをどのように構築するべきかの例を提供することはできますか
ありがとう! ノミ
上記の答えは正しいですが、SqlQueryのシグネチャはSqlQuery(sql:String、params object [] parameters)なので、コードを単純化して、より自然な感じを与えることができます:
context.SqlQuery(sql, latParam, lngPara);
これは、最初に配列することなく、完全に正当なものになります。
私はメソッドのパラメータをきれいにしてしまうので、私のデータベースの列と同じではないでしょう。 ObjectParameterは@記号をサポートしていないため、動作しませんでした。 私は次の解決策に終わった。
public ActionResult APILocation(string latitude, string longitude)
{
string SQL = "select * from (select *, Distance = ((ACOS(SIN({0} * PI() / 180) * SIN(lat * PI() / 180) + COS({0} * PI() / 180) * COS(lat * PI() / 180) * COS(({1} - long) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) from dbo.Parish) t where Distance < 10 order by Distance asc";
SqlParameter latParam = new SqlParameter("lat", latitude);
SqlParameter lngParam = new SqlParameter("long", longitude);
object[] parameters = new object[] { latParam , lngParam };
var stores = db.Store.SqlQuery(SQL, parameters);
return Json(stores, JsonRequestBehavior.AllowGet);
}
私はサブセレクトで*を選択しなければなりませんでした。なぜなら、それは私が1つの列を返すだけであって、すべてではないためにできなかったエンティティにマップしようとしていたからです。 このソリューションは私のために働くことが判明しました!
最終的には、object []パラメータ全体を以下のようにすることができます:
SqlParameter latParam = new SqlParameter("latitude", latitude);
SqlParameter lngParam = new SqlParameter("longitude", longitude);
object[] parameters = new object[] { latitude, longitude };
あなたの助けに感謝hwcverwe。
ノミ