zoukankan      html  css  js  c++  java
  • EF增删查改(三)------终极版

    1.Add

     1 #region 1.1 新增学生信息(定义成Int类型,返回受影响的行数)
     2         /// <summary>
     3         /// 新增学生信息
     4         /// </summary>
     5         /// <param name="stu"></param>
     6         /// <returns></returns>
     7         public int Add(Studnet stu)
     8         {
     9             //把对象加入到EF上下文中,并获取对象的状态管理对象
    10             DbEntityEntry<Studnet> entry = db.Entry<Studnet>(stu);
    11 
    12             //把状态改为Added
    13             //要引入System.Data.Entity
    14             entry.State = System.Data.EntityState.Added;
    15 
    16             //保存到数据库
    17            return  db.SaveChanges();
    18            
    19         }
    20         #endregion

    2.Delete

    2.1根据用户ID来删除

     1 #region 2.0 根据学生的ID来删除
     2         /// <summary>
     3         /// 根据学生的ID来删除
     4         /// </summary>
     5         /// <param name="id"></param>
     6         /// <returns></returns>
     7         public int Delete(int id)
     8         {
     9             Studnet stu = new Studnet() { s_ID = id };
    10             //删除传过来的ID
    11             //DbEntityEntry<Studnet> stu= db.Studnets.Where(s => s.s_ID == id) as DbEntityEntry<Studnet>;
    12             DbEntityEntry<Studnet> entry = db.Entry<Studnet>(stu);
    13             //把状态改为deleted
    14             entry.State = System.Data.EntityState.Deleted;
    15 
    16             //保存到数据库
    17             return db.SaveChanges();
    18         } 
    19         #endregion

    2.2根据条件来删除

    其实就是在where方法中传入了一个lambda表达式,而lambda表达式本质上就是一个匿名函数。

     1 #region 2.1 根据条件来删除
     2         /// <summary>
     3         /// 根据条件来删除
     4         /// (给出任意条件,然后删除)
     5         /// </summary>
     6         /// <returns></returns>
     7         public int DeleteBy(System.Linq.Expressions.Expression<Func<Studnet, bool>> deleteWhere)
     8         {
    //查询出要删除的数据
    9 List<Studnet> stuList = db.Studnets.Where(deleteWhere).ToList(); 10 //循环删除 11 stuList.ForEach(u => db.Studnets.Remove(u)); 12 13 //保存到数据库 14 return db.SaveChanges(); 15 16 } 17 #endregion

    3.Modify

     1 #region 3.0 修改
     2         /// <summary>
     3         /// 修改
     4         /// 要告诉程序,哪个属性改了。这里添加一个可变参数数组
     5         /// </summary>
     6         /// <param name="stu"></param>
     7         /// <returns></returns>
     8         public int Modify(Studnet stu, params string[] parmeters)
     9         {
    10             //把对象加入到EF容器,并获取状态管理对象
    11             DbEntityEntry<Studnet> entry = db.Entry<Studnet>(stu);
    12 
    13             //对象的状态改为Unchanged
    14             entry.State = System.Data.EntityState.Unchanged;
    15             foreach (string parms in parmeters)
    16             {
    17                 entry.Property(parms).IsModified = true;
    18             }
    19 
    20             return db.SaveChanges();
    21         } 
    22         #endregion

    测试修改:

     1  /// <summary>
     2         /// 修改的测试
     3         /// </summary>
     4         public Student()
     5         {
     6             //把Id为1的学生的名字改为xxxxxxxxxxx
     7             Studnet stu = new Studnet() { s_ID=1,s_Name="xxxxxxxxxxx"};
     8             //改哪个实体,改哪个属性
     9             this.Modify(stu, "s_Name");
    10         }
    Test Modify

    测试删除:

    1 /// <summary>
    2         /// 删除的测试
    3         /// </summary>
    4         public Student()
    5         {
    6          
    7             this.DeleteBy(u => u.s_ID == 1);
    8         }
    Test Delete

    4. Query

    4.1根据条件查询

     1 #region 4.1  根据条件查询
     2         /// <summary>
     3         /// 根据条件查询
     4         /// 查询的结果一般都是集合,所以返回值类型为泛型集合
     5         /// </summary>
     6         /// <returns></returns>
     7         public List<Studnet> GetStudentList(System.Linq.Expressions.Expression<Func<Studnet, bool>> whereQuery)
     8         {
     9             return db.Studnets.Where(whereQuery).ToList();
    10         } 
    11         #endregion

    4.2根据条件查询,查询完之后,还要分组。

     1 /// <summary>
     2         /// 根据条件查询,查询玩之后,还要分组
     3         /// </summary>
     4         /// <param name="whereQuery"></param>
     5         /// <param name="QroupByQuery"></param>
     6         /// <returns></returns>
     7         public List<Studnet> GetStudentList<Tkey>(System.Linq.Expressions.Expression<Func<Studnet, bool>> whereQuery, System.Linq.Expressions.Expression<Func<Studnet, Tkey>> QroupByQuery)
     8         {
     9             return db.Studnets.Where(whereQuery).OrderBy(QroupByQuery).ToList();
    10         }

    测试根据条件查询:

    1  public Student()
    2         {
    3             this.GetStudentList(u => u.s_ID == 1 && u.s_Sex == "");
    4 
    5         }
    根据条件查询

    测试根据条件查询,查询完之后再根据条件分组:

    1  public Student()
    2         {
    3            
    4             this.GetStudentList(u => u.s_ID >= 1, u => u.s_Sex);
    5         }
    查询并分组

    4.3分页查询

     1 #region 4.2 分页查询
     2         /// <summary>
     3         /// 分页查询
     4         /// 先排序,再分页
     5         /// </summary>
     6         /// <param name="pageIndex">页码</param>
     7         /// <param name="pageSize">页容量</param>
     8         /// <param name="orderLambda">排序条件</param>
     9         /// <returns></returns>
    10         public List<Studnet> GetPagedList<Tkey>(int pageIndex, int pageSize, Expression<Func<Studnet, Tkey>> orderLambda)
    11         {
    //分页:一定要注意,Skip之前一定要OrderBy,因为到时候会生成一个RowNum的分页查询(通过SQL ServerProfier侦听到的)
    12 return db.Studnets.OrderBy(orderLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); 13 } 14 #endregion
  • 相关阅读:
    树链剖分
    NOI2015 软件包管理器(树链剖分+线段树)
    9.11NOIP模拟题
    9.10NOIP模拟题
    bzoj1121[POI2008]激光发射器SZK(结论)
    9.9 NOIP模拟题
    树形dp
    P1272 重建道路(树形dp)
    Codeforces Round #419 (Div. 2)
    9.2NOIP模拟题
  • 原文地址:https://www.cnblogs.com/caofangsheng/p/4531616.html
Copyright © 2011-2022 走看看