zoukankan      html  css  js  c++  java
  • 利用EF和C#泛型实现通用分页查询

    利用EF和C#泛型实现通用分页查询

          Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架。此框架将数据库中的表信息通过xml与实体类对象相关联,使得开发人员只需要关心实体对象,而不需要手动操作数据库,对实体对象的修改会映射到数据库中,这样大大提高了开发效率。以下代码使用了EF、泛型、泛型委托、lambda、匿名类、dynamic动态类型等知识完成了EF的crud,并且提供了一个高效的通用分页查询方法,采用了延时加载,返回值类型是IQueryable。
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Data.Entity;
      4 using System.Linq;
      5 using System.Linq.Expressions;
      6 using System.Text;
      7 
      8 namespace EFtest
      9 {
     10     class Program
     11     {
     12         static void Main(string[] args)
     13         {
     14             testEntities context = new testEntities();
     15 
     16             // 17             //T_Test t = new T_Test() {Name="小林" };          
     18             //context.T_Test.Add(t);
     19             //context.SaveChanges();
     20 
     21 
     22             // 23             //lambda方式
     24             //var t = context.T_Test.Where(u=>(u.Id==1)).FirstOrDefault();
     25 
     26             //linq to sql方式
     27             //var t = (from u in context.T_Test
     28             //         where u.Id == 1
     29             //         select u).FirstOrDefault();
     30             //context.T_Test.Remove(t);
     31             //context.SaveChanges();
     32             //数据的删除用这种方式更方便,效率更高
     33             //T_Test t = new T_Test() { Id=2 };
     34             //context.Entry<T_Test>(t).State=EntityState.Deleted;
     35             //context.SaveChanges();
     36 
     37             // 38             //var t = (from u in context.T_Test
     39             //         where u.Id == 2
     40             //         select u).FirstOrDefault();
     41             //t.Name = "小林";
     42             //context.SaveChanges();
     43 
     44             // 45             //var t = (from u in context.T_Test
     46             //         where u.Id == 2
     47             //         select u).FirstOrDefault();
     48             //Console.WriteLine(t.Id + t.Name);
     49             
     50             //通用分页
     51             int count;          
     52             GetPageListParameter<T_Test, int> parameter=new GetPageListParameter<T_Test,int>();
     53             parameter.isAsc=true;
     54             parameter.orderByLambda = s => s.Id;
     55             parameter.pageIndex = 1;
     56             parameter.pageSize = 3;
     57             parameter.selectLambda = s => new Person{Name=s.Name };
     58             parameter.whereLambda = s => s.Id > 3;
     59 
     60             var data = GetPageList<T_Test, int>(parameter, out count);
     61 
     62             foreach (Person t in data)
     63             {
     64                 Console.WriteLine(t.Name);
     65             }
     66 
     67             Console.ReadKey();
     68         }
     69 
     70         public static List<dynamic> GetPageList<T, TKey>(GetPageListParameter<T, TKey> parameter, out int count) where T : class
     71         {
     72             testEntities context = new testEntities();
     73             //注意顺序
     74             count = context.Set<T>().Where<T>(parameter.whereLambda).Count();
     75             var list = context.Set<T>().Where<T>(parameter.whereLambda);
     76             if (parameter.isAsc)
     77             {
     78                 list = list.OrderBy(parameter.orderByLambda);
     79             }
     80             else
     81             {
     82                 list = list.OrderByDescending(parameter.orderByLambda);
     83             }
     84 
     85             return list.Skip((parameter.pageIndex - 1) * parameter.pageSize).Take(parameter.pageSize).Select(parameter.selectLambda).ToList();
     86         }
     87     }
     88 
     89     //取所需列
     90     public class Person
     91     {
     92         public string Name { get; set; }
     93     }
     94 
     95     //封装方法参数
     96     public class GetPageListParameter<T, TKey>
     97     {
     98         public Expression<Func<T, dynamic>> selectLambda { get; set; }
     99         public Expression<Func<T, bool>> whereLambda { get; set; }
    100         public Expression<Func<T, TKey>> orderByLambda { get; set; }
    101         public int pageSize { get; set; }
    102         public int pageIndex { get; set; }
    103         public bool isAsc { get; set; }
    104     }
    105 }
  • 相关阅读:
    Rabbitmq整合SpringBoot
    linux下转pdf乱码
    invalid authentication data connection reset
    谷粒商城异步编排(三十一)
    KSA运行
    安装k8s缺少模块
    ansible安装
    Rabbitmq常见的模式
    Rabbitmq入门
    谷粒商城检索服务(三十)
  • 原文地址:https://www.cnblogs.com/sunniest/p/4123560.html
Copyright © 2011-2022 走看看