我有以下方法来调用存储过程;
public IList<Trader> GetTradersWithinRadius(int category, decimal latitude, decimal longitude)
{
var sproc = "FindTradersWithinRadiusLatLong";
var sqlParams = new List<SqlParameter>()
{
new SqlParameter("@CATEGORY", category),
new SqlParameter("@LAT", latitude),
new SqlParameter("@LONG", longitude),
};
var parameters = sqlParams.ToArray<object>();
var traders = this.Traders.FromSql($"{sproc} @CATEGORY, @LAT, @LONG", parameters).ToList();
return traders;
}
现在,如果我直接在SQL Management studio中执行存储过程;
EXEC @return_value = [FindTradersWithinRadiusLatLong]
@LAT = 43.590000,
@LONG = -111.120000,
@CATEGORY = 1
我得到了一个结果。但是,当我调用上面的方法时,我会返回一个空集?
Trader类是;
public class Trader : AuditableEntity
{
public string Name { get; set; }
public string Telephone { get; set; }
public string Email { get; set; }
public string Website { get; set; }
public List<Profile> Profiles { get; set; }
public List<Address> Addresses { get; set; }
public List<Contact> Contacts { get; set; }
public List<TraderCategory> Categories { get; set; }
public string Notes { get; set; }
public List<TraderGallery> Gallery { get; set; }
public List<Review> Reviews { get; set; }
public TraderReviewStatistic ReviewStatistic { get; set; }
public ApplicationUser User { get; set; }
}
有没有理由不生成我通过MSSQL Manager获得的列表?
答案 0 :(得分:1)
我认为问题在于你如何撰写查询。至少,你使它变得比它需要的更困难。 FromSql
可以直接处理命名参数,只需传递值(它使用相对位置来确定哪个值代替了什么)。长短,试试:
var traders = this.Traders.FromSql($"{sproc} @CATEGORY, @LAT, @LONG", category, latitude, longitude).ToList();
无需创建SqlParameter
s的显式数组。