par*_*ari 9 c# stored-procedures entity-framework
当我需要传递单个参数时,我可以轻松完成,如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但是当我尝试做同样的事情但传递两个参数时我发现语法错误称为无效参数请帮我做这个.使用两个参数时的代码如下
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Jot*_*aBe 21
问题是您尝试将多个参数作为单个对象传递.
如果你看一下签名,Database.SqlQuery你会看到:
public DbRawSqlQuery<TElement> SqlQuery<TElement>(
string sql,
params Object[] parameters
)
Run Code Online (Sandbox Code Playgroud)
这太基础了,但是,当你params在C#函数中看到它意味着"任意数量的参数".这意味着您可以根据需要传递尽可能多的参数.所以,在你的情况下,它就像这样:
_context.Database.SqlQuery<ProjectsModel>(
"exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId",
new SqlParameter("@sectorId", sectorid),
new SqlParameter("@subSectorId", subsectorid)
).ToList()
Run Code Online (Sandbox Code Playgroud)
请注意,当您找到时params Object[],您也可以传递数组而不是几个参数,即
_context.Database.SqlQuery<ProjectsModel>(
"exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId",
new Object[] { new SqlParameter("@sectorId", sectorid),
new SqlParameter("@subSectorId", subsectorid)}
).ToList()
Run Code Online (Sandbox Code Playgroud)
根据代码的外观,这可能更方便.