您的位置:首页 > 数据库

MVC中使用Linq To Sql进行数据查询及分页

2010-09-10 16:38 846 查看
这两天一直在研究MVC中使用LINQ TO SQL实现多表查询及分页功能,参照之前的LINQ项目和网上资料,基本实现了两个表查询及分页功能

假如有两个表 student学生表和stujz家长表,两个表的对应关系是student.id自增等于stujz.stuid。

student表



stujz表



实现过程:

一、在Model层使用Linq的查询语句查询数据

二、将Linq查询结果转成List<T>

三、由Control层将查询结果存入页面数据模型

代码如下:




Model层代码: ...
public class StudentsModel
{
private StudentsDbDataContext _dataContext = new StudentsDbDataContext();
//使用Linq查询语句方式查询记录
public IList<ResultModel.ResultStudentsList> ListAll(int intPageStart,int intPageEnd)
{
//加上.Skip().Take()语句,相当于Sqlserver的row_number()作用,查询时分页
var strudents = (from s in _dataContext.student
join j in _dataContext.stujz on s.id equals j.stuid
select new { s.stuname, s.stusex, s.stunl, j.jzname, j.jzphone }).Skip(intPageStart).Take(intPageEnd);
List<ResultModel.ResultStudentsList> list = ChangeLinqToList(strudents);
return list;
}
}
/// <summary>
/// 将Linq 查询结果转成List<T>
/// </summary>
/// <typeparam name="T">Linq查询的结果集的结构</typeparam>
/// <param name="data">Linq查询的结果集</param>
/// <returns>List<T></returns>
public static List<ResultModel.ResultStudentsList> ChangeLinqToList<T>(IEnumerable<T> data)
{
//返回查询结果
List<ResultModel.ResultStudentsList> retlist = new List<ResultModel.ResultStudentsList>();
//获得泛型类型的属性
var objProperty = System.ComponentModel.TypeDescriptor.GetProperties(typeof(T));
//遍历结果集
foreach (T t in data)
{
ResultModel.ResultStudentsList _model = new ResultModel.ResultStudentsList();
//获得数据模型的实例
Type type = _model.GetType();
//遍历数据集每行中每列的值
foreach (System.ComponentModel.PropertyDescriptor objProDescriptor in objProperty)
{
//将值装箱,这样可以防止类型不匹配
object o = objProDescriptor.GetValue(t);
//将装箱后的值存入数据模型中对应的字段中
type.GetField("_" + objProDescriptor.Name).SetValue(_model, o);
}
//给返回的结果集添加一条记录
retlist.Add(_model);
}
//返回查询的结果集
return retlist;
}




Control层代码如下: ...
public ActionResult StudentList(int? page)
{
//使用Linq To Sql实现数据查询
IEnumerable<ResultModel.ResultStudentsList> modellist = _repository.ListAll();//Linq查询语句方式
//定义返回给页面的数据模型
var viewData = new ModelStudentData();
//将结果存入数据模型
viewData.StudentList= modellist;
return View(viewData);
}




View层代码如下: ...
<p>统计学生: </p>
<table border="0" cellspacing="0" cellpadding="0" width="100%" class="list">
<tr>
<th>学生姓名</th>
<th>学生性别</th>
<th>学生年龄</th>
<th>家长姓名</th>
<th>家长手机</th>
</tr>
<% foreach (var item in Model.StudentList){%>
<tr>
<td align="center">
<%=item.stuname%>
</td>
<td align="center">
<%=item.stusex%>
</td>
<td align="center">
<%=item.stunl%>
</td>
<td align="center">
<%=item.jzname%>
</td>
<td align="center">
<%=item.jzphone%>
</td>
</tr>
<% } %>
</table>

刚接触MVC+Linq的开发,所以实现的有些麻烦,应该有更好的实现方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: