当我需要传递单个参数时,我可以轻松完成,如下所示:
public ProjectsModel GetProjectListBySearch(int projectId)
{
try
{
using (_context = new Exo_ADBEntities())
{
var getdetailprojectlist = _context.Database.SqlQuery<ProjectsModel>("exec dbo.[GetProjectListByID] @ProjectID", new SqlParameter("@ProjectID", projectId)).FirstOrDefault();
return getdetailprojectlist;
}
}
catch (Exception)
{
throw;
}
}
这很好用但是当我尝试做同样的事情但传递两个参数时我发现语法错误称为无效参数请帮我做这个。使用两个参数时的代码如下
public List<ProjectsModel> GetProjectDetailsBySectorAndSubSector(int sectorid,int subsectorid)
{
try
{
using (_context = new Exo_ADBEntities())
{
var projectbysectorandsubsector = _context.Database.SqlQuery<ProjectsModel>("exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId", new SqlParameter("@sectorId, @subSectorId", sectorid, subsectorid)).ToList();
return projectbysectorandsubsector;
}
}
catch (Exception)
{
throw;
}
}
答案 0 :(得分:14)
问题在于您尝试将多个参数作为单个对象传递。
如果您Database.SqlQuery
look at the signature,您会看到:
public DbRawSqlQuery<TElement> SqlQuery<TElement>(
string sql,
params Object[] parameters
)
这太基础了,但是,当你在C#函数中看到params
时,它意味着“任意数量的参数”。这意味着您可以根据需要传递尽可能多的参数。所以,在你的情况下,它就像这样:
_context.Database.SqlQuery<ProjectsModel>(
"exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId",
new SqlParameter("@sectorId", sectorid),
new SqlParameter("@subSectorId", subsectorid)
).ToList()
请注意,当您找到params Object[]
时,您也可以传递一个数组而不是几个参数,即
_context.Database.SqlQuery<ProjectsModel>(
"exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId",
new Object[] { new SqlParameter("@sectorId", sectorid),
new SqlParameter("@subSectorId", subsectorid)}
).ToList()
根据代码的外观,这可能更方便。
答案 1 :(得分:0)
您可以选择几种方式。
将视图模型传递回控制器,这是我个人的偏好。
或者在global.asax中设置一个带有两个参数的新路径。
或者您可以手动执行表单发布并使用视图中的jQuery传递这两个参数