[英]How to pass parameters to DbSet.SqlQuery Method in Entity Framework
我試圖在實體框架中執行一個RAW SQL語句,它接受一些參數。 我使用的方法來自DbSet.SqlQuery
我對如何構造params對象數組感到困惑:params object []參數
這是我的代碼塊:
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 object []參數
謝謝! 跳蚤
我最終清理了我的方法的參數,因此它們與我的數據庫列不同,這些不太清楚。 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);
}
我還必須在我的子選擇中選擇*,因為它試圖映射到我的實體,它不能,因為我只是返回一列而不是一切。 事實證明這個解決方案對我有用!
最終,整個object []參數可以像這樣完成:
SqlParameter latParam = new SqlParameter("latitude", latitude);
SqlParameter lngParam = new SqlParameter("longitude", longitude);
object[] parameters = new object[] { latitude, longitude };
感謝hwcverwe的幫助。
跳蚤
上面的答案是正確的,但由於SqlQuery的簽名是SqlQuery(sql:String,params object []參數),您可以使用以下方法簡化代碼並使其更自然!
context.SqlQuery(sql, latParam, lngPara);
這是完全合法的,無需先排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.