EF 显示、分页、查询、下拉框

一、EF 显示

1.首先实例化上下文

 //实例化上下文
      StudentDbContext db = new StudentDbContext();//例子

2.定义方法 返回值类型是LIst<>集合,

public List<Student> PageShow()

1).单表显示

public List<Student> Show()
      {
          return db.Students.ToList();//转换成list集合
      }

2).两表以上显示

 IQueryable<Student> query = db.Students.Include("NClass");//例子
IQueryable<>接口 继承IEnumerable<T>接口 返回枚举类型
Include 类似 join

二、查询

1.首先传入参数

例子:
public List<Student> PageShow(string sname ,int? nid)
参数类型和数据表里的类型保持一致
数值类型 可以赋予默认值也可以默认为空

2.拼接条件查询语句

  例子:
//判断学生姓名非空
if (!string.IsNullOrEmpty(sname))
{
//Contains 包含
query = query.Where(u => u.SName.Contains(sname));
}
//判断班级
if (nid!=null)
{
query = query.Where(u => u.NId == nid);
}

三、分页

1.首先参数

 例子:
public List<Student> PageShow(out int totalcount, out int totalpage,int pageindex=1,int pagesize = 3)
输出参数
totalcount 总条数
totalpage 总页数
pageindex 当前页 赋予初始值
pagesize 页大小 赋予初始值

2.获取总条数和总页数

 例子:
totalcount = query.Count(); //总条数
totalpage = Convert.ToInt32(Math.Ceiling(totalcount * 1.0 / pagesize)); //总页数
获取总页数的公示: (总条数*1.0/页大小) 在C#里整数除以整数得到的还是整数,所以乘以个小数
注:获取到的总条数是小数要向上取整并转换成整数类型

3.拼接分页语句

例子:
return query.OrderBy(u => u.SId).Skip((pageindex - 1) *pagesize).Take(pagesize).ToList();
OrderBy 随意字段进行排序,建议用ID
Skip 跳过多少条
Take 显示多少条

四、下拉框

  例子:
public List<NClass> LoadClass()
      {
          return db.NClass.ToList();//返回list集合
      }
  返回类型也是List<>集合,直接ToList()查询显示全部字段

五、显示、分页、查询控制器

例子:
public ActionResult PageShowStudent(string sname,int? nid,int pageindex =1,int pagesize =3)
      {
          int totalcount;
          int totalpage;
          var query = dal.PageShow(out totalcount, out totalpage,sname,nid,pageindex, pagesize);
          var list = new StaticPagedList<Student>(query, pageindex, pagesize, totalcount);
          return View(list);
      }
参数和后台参数一样定义输出参数并传入方法
使用PagedList控件进行分页,PagedList控件自动计算总页数不用传入总页数
使用PagedList控件一定要引用命名空间
using PagedList;
using PagedList.Mvc;
注:参数赋予初始值的一定要在未赋初始值的后面

六、下拉框控制器

 例子:
public void loadClass()
{
ViewBag.nid = new SelectList(dal.LoadClass(), "NId", "CName");
}
使用ViewBag传值,只需传入ID和名称

七、显示、分页、查询、下拉框视图

例子:
@using PagedList;
@using PagedList.Mvc;
@model StaticPagedList<Unit02.Models.Student>
@{
  ViewBag.Title = "PageShowStudent";
}
?
<h2>显示</h2>
//查询
<form>
  姓名: @Html.TextBox("name")
  班级: @Html.DropDownList("nid",(SelectList)ViewBag.nid,"请选择")//下拉框
  <input type="submit" class="btn btn-primary" value="查询" />
</form>
//查询使用form表单提交
//显示数据
<table class="table table-bordered">
  <thead>
      <tr>
          <td>姓名</td>
          <td>年龄</td>
          <td>性别</td>
          <td>班级</td>
          <td>爱好</td>
      </tr>
  </thead>
  <tbody>
      @foreach (var item in Model)
      {
          <tr>
              <td>@item.Name</td>
              <td>@item.Age</td>
              <td>@(item.Sex?"男":"女")</td>
              <td>@item.NClass.CName</td>
              <td>@item.Hobby</td>
          </tr>
      }
  </tbody>
</table>
//分页
@Html.PagedListPager(Model,pageindex=>Url.Action("PageShowStudent", new {
  name=Request["name"],
  nid = Request["nid"],
  pageindex
}),new PagedListRenderOptions {
  LinkToFirstPageFormat="首页",
  LinkToPreviousPageFormat="上一页",
  LinkToNextPageFormat="下一页",
  LinkToLastPageFormat="尾页"
?
})
?
?

八、效果

1.显示数据

EF  显示、分页、查询、下拉框

 

2.下拉框

 

EF  显示、分页、查询、下拉框

 

3.查询

 

EF  显示、分页、查询、下拉框

EF 显示、分页、查询、下拉框

上一篇:【踩坑若干——BUG异闻录】


下一篇:单例模式