【发布时间】:2017-11-07 09:51:29
【问题描述】:
您好,我有一个在 sql server 中进行的查询,如下所示,sp 名称为 sp_StudentRequest
Select DISTINCT SR.StudentRequestId,SR.RegistrationId,SR.Location,SR.PaymentMethod,SR.CreatedOn,C.ClassName,CC.CampusName,
CASE WHEN ISNULL(TSR.StatusId,0)=0 THEN 1 ELSE TSR.StatusId END AS StatusId,
substring(
(
Select ', '+REPLACE(REPLACE(ST1.FromTime,'AM',''),'PM','')+'-'+ST1.ToTime AS [text()]
From dbo.StudentRequestTimings ST1
Where ST1.StudentRequestId = SRT.StudentRequestId
ORDER BY ST1.CreatedOn
For XML PATH ('')
), 2, 1000) [Time]
FROM StudentRequest SR
Inner JOIN Registration R ON R.RegistrationId=SR.RegistrationId
INNER JOIN Campus CC ON CC.CampusId=R.CampusId
INNER JOIN Class C ON C.ClassId=SR.ClassId
LEFT JOIN TutorClasses TC ON SR.ClassId=TC.ClassId
LEFT JOIN StudentRequestTimings SRT ON SR.StudentRequestId=SRT.StudentRequestId
LEFT JOIN TutorStudentRequest TSR ON TSR.StudentRequestId=SRT.StudentRequestId AND TutorId=@RegistrationId
where TC.RegistrationId=@RegistrationId
ORDER BY SR.CreatedOn DESC
我从控制器调用此代码为
public ActionResult TutorDashboard(int? page)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("sp_StudentRequest"))
{
DataSet GetData = new DataSet();
cmd.Connection = con;
con.Open();
cmd.Parameters.AddWithValue("@Operation", "GetTutorRequestDetail");
cmd.Parameters.AddWithValue("@RegistrationId", 1);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter ad = new SqlDataAdapter(cmd);
ad.Fill(GetData);
if (GetData.Tables[0].Rows.Count > 0)
{
ViewBag.TutorRequest = GetData.Tables[0].ToPagedList(page ?? 1, 1);
}
con.Close();
}
}
return View(ViewBag.TutorRequest);
}
现在我需要tom在PagedList的帮助下实现MVC中的分页,我该怎么做?
如果我不能使用这个 sql 查询,那么在实体框架中转换这个查询的方法是什么?
任何帮助都会对我有用。
【问题讨论】:
-
您需要将数据投影到模型中,而不是
DataSet -
@StephenMuecke 在模型中获取数据我需要实现实体/linq 查询对吗?或者我们可以直接从sql查询中获取数据并填写模型?
-
您可以使用
DataReader来读取结果。但是就像使用DataSet一样,因为您下载了所有数据,所以它破坏了服务器端分页的全部目的。将 EF 与 linq 一起使用是最好的方法(.ToPagedList()` 在内部使用.Skip()和.Take()来生成只返回您需要的记录的 sql 查询) -
但是,如果您确实希望使用您的 sp,则为
OFFSET和NEXT添加其他参数(例如,请参阅 this answer(然后使用DataReader来投影结果)进入模型) -
@StephenMuecke 你能帮我把这个 sql 查询作为 linq/entity 查询吗?
标签: c# sql-server asp.net-mvc