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

      Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架。此框架将数据库中的表信息通过xml与实体类对象相关联,使得开发人员只需要关心实体对象,而不需要手动操作数据库,对实体对象的修改会映射到数据库中,这样大大提高了开发效率。以下代码使用了EF、泛型、泛型委托、lambda、匿名类、dynamic动态类型等知识完成了EF的crud,并且提供了一个高效的通用分页查询方法,采用了延时加载,返回值类型是IQueryable。
 using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Text; namespace EFtest
{
class Program
{
static void Main(string[] args)
{
testEntities context = new testEntities(); //增
//T_Test t = new T_Test() {Name="小林" };
//context.T_Test.Add(t);
//context.SaveChanges(); //删
//lambda方式
//var t = context.T_Test.Where(u=>(u.Id==1)).FirstOrDefault(); //linq to sql方式
//var t = (from u in context.T_Test
// where u.Id == 1
// select u).FirstOrDefault();
//context.T_Test.Remove(t);
//context.SaveChanges();
//数据的删除用这种方式更方便,效率更高
//T_Test t = new T_Test() { Id=2 };
//context.Entry<T_Test>(t).State=EntityState.Deleted;
//context.SaveChanges(); //改
//var t = (from u in context.T_Test
// where u.Id == 2
// select u).FirstOrDefault();
//t.Name = "小林";
//context.SaveChanges(); //查
//var t = (from u in context.T_Test
// where u.Id == 2
// select u).FirstOrDefault();
//Console.WriteLine(t.Id + t.Name); //通用分页
int count;
GetPageListParameter<T_Test, int> parameter=new GetPageListParameter<T_Test,int>();
parameter.isAsc=true;
parameter.orderByLambda = s => s.Id;
parameter.pageIndex = ;
parameter.pageSize = ;
parameter.selectLambda = s => new Person{Name=s.Name };
parameter.whereLambda = s => s.Id > ; var data = GetPageList<T_Test, int>(parameter, out count); foreach (Person t in data)
{
Console.WriteLine(t.Name);
} Console.ReadKey();
} public static List<dynamic> GetPageList<T, TKey>(GetPageListParameter<T, TKey> parameter, out int count) where T : class
{
testEntities context = new testEntities();
//注意顺序
count = context.Set<T>().Where<T>(parameter.whereLambda).Count();
var list = context.Set<T>().Where<T>(parameter.whereLambda);
if (parameter.isAsc)
{
list = list.OrderBy(parameter.orderByLambda);
}
else
{
list = list.OrderByDescending(parameter.orderByLambda);
} return list.Skip((parameter.pageIndex - ) * parameter.pageSize).Take(parameter.pageSize).Select(parameter.selectLambda).ToList();
}
} //取所需列
public class Person
{
public string Name { get; set; }
} //封装方法参数
public class GetPageListParameter<T, TKey>
{
public Expression<Func<T, dynamic>> selectLambda { get; set; }
public Expression<Func<T, bool>> whereLambda { get; set; }
public Expression<Func<T, TKey>> orderByLambda { get; set; }
public int pageSize { get; set; }
public int pageIndex { get; set; }
public bool isAsc { get; set; }
}
}

利用EF和C#泛型实现通用分页查询的更多相关文章

  1. Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法

    先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 ...

  2. 防SQL注入:生成参数化的通用分页查询语句

    原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...

  3. sqlsever 创建一个通用分页查询

    -- Author: Mis Chen-- Create date: 2018年5月15日 11:21:47-- Description: 创建一个通用分页查询-- ================= ...

  4. <五>JDBC_利用反射及JDBC元数据编写通用的查询方法

    此类针对javaBean类写了一个通用的查询方法,List<javaBean> 通用查询更新中...:通过学习,深刻体会到学会反射就等于掌握了java基础的半壁江山! 一.使用JDBC驱动 ...

  5. 用Java实现异构数据库的高效通用分页查询功能

    不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...

  6. Oracle 存储过程之通用分页查询

    在数据库中书写通用分页存储过程,有利于代码的维护以及执行效率的提升 create or replace procedure Sp_QueryDatePage ( tableName in varcha ...

  7. MYSQL 之 JDBC(六): 增删改查(四)利用反射及JDBC元数据编写通用的查询

    1.先利用SQL进行查询,得到结果集2.利用反射创建实体类的对象:创建Student对象3.获取结果集的列的别名:idCard.studentName4.再获取结果集的每一列的值,结合3得到一个Map ...

  8. 利用EF Core的Join进行多表查询

    背景 话说有这么一家子,老公养了一条狗,老婆养了一只猫. 数据库的设计 人表 宠物表 通过表可以知道,宠物通过Owner指向主人的Id. 问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎 ...

  9. 利用反射及jdbc元数据实现通用的查询方法

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. Android漏洞——将Android恶意代码隐藏在图片中

    研究人员发现了Android上又一个严重的安全漏洞:将Android恶意代码隐藏在图片中(Hide Android Applications in Images). 在该漏洞向外界公开之前,Googl ...

  2. 20155210 Exp8 WEB基础实践

    Exp8 WEB基础实践 Apache环境配置 apache是kali下的web服务器,通过访问ip地址+端口号+文件名称可以打开对应的网页. 输入命令vi /etc/apache2/ports.co ...

  3. 20155232《网络对抗》Exp4 恶意代码分析

    20155232<网络对抗>Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门 ...

  4. 20155238 2016-2017-2 《JAVA程序设计》第九周学习总结

    教材学习内容总结 第十六章 JDBC SQL的解决方案是JDBC,在Java中,JDBC API主要用来存取数据库. *JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关 ...

  5. 【转载】VS配置路径和宏

    原文路径:http://blog.csdn.net/puttytree/article/details/7838419 在介绍项目配置之前,先说明两点 1. 项目配置中,最好不要使用相对路径,更不要使 ...

  6. linux下如何解除被占用的端口号

    在本例中,假设8080端口被占用. 1.查看8080端口是否被占用: netstat -anp | grep 8080输出结果:tcp        0      0 :::8080         ...

  7. 一个Python开源项目-腾讯哈勃沙箱源码剖析(上)

    前言 2019年来了,2020年还会远吗? 请把下一年的年终奖发一下,谢谢... 回顾逝去的2018年,最大的改变是从一名学生变成了一位工作者,不敢说自己多么的职业化,但是正在努力往那个方向走. 以前 ...

  8. 命令行启用IIS Express

    我们在调试WEB程序的时候可以把本地web程序挂载到本地IIS,然后访问程序,通过附加进程的方式(w3wp)来调试程序(个人非常喜欢的一种调试方式),还有一种比较传统的方式就是通过VS自带的F5来执行 ...

  9. 移动端效果之ScrollList

    写在前面 列表一直是展示数据的一个重要方式,在手机端的列表展示又和PC端展示不同,毕竟手机端主要靠滑.之前手机端之前一直使用的IScroll,但是IScroll本身其实有很多兼容性BUG,想改动一下需 ...

  10. centos7 php性能调优

    php-ini优化 vi /etc/php.ini 打开php的安全模式,控制php执行危险函数, 默认是Off,改为On sql.safe_mode = Off 关闭php头部信息, 隐藏版本号, ...