利用EF和C#泛型实现通用分页查询
利用EF和C#泛型实现通用分页查询
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#泛型实现通用分页查询的更多相关文章
- Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法
先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 ...
- 防SQL注入:生成参数化的通用分页查询语句
原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...
- sqlsever 创建一个通用分页查询
-- Author: Mis Chen-- Create date: 2018年5月15日 11:21:47-- Description: 创建一个通用分页查询-- ================= ...
- <五>JDBC_利用反射及JDBC元数据编写通用的查询方法
此类针对javaBean类写了一个通用的查询方法,List<javaBean> 通用查询更新中...:通过学习,深刻体会到学会反射就等于掌握了java基础的半壁江山! 一.使用JDBC驱动 ...
- 用Java实现异构数据库的高效通用分页查询功能
不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...
- Oracle 存储过程之通用分页查询
在数据库中书写通用分页存储过程,有利于代码的维护以及执行效率的提升 create or replace procedure Sp_QueryDatePage ( tableName in varcha ...
- MYSQL 之 JDBC(六): 增删改查(四)利用反射及JDBC元数据编写通用的查询
1.先利用SQL进行查询,得到结果集2.利用反射创建实体类的对象:创建Student对象3.获取结果集的列的别名:idCard.studentName4.再获取结果集的每一列的值,结合3得到一个Map ...
- 利用EF Core的Join进行多表查询
背景 话说有这么一家子,老公养了一条狗,老婆养了一只猫. 数据库的设计 人表 宠物表 通过表可以知道,宠物通过Owner指向主人的Id. 问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎 ...
- 利用反射及jdbc元数据实现通用的查询方法
---------------------------------------------------------------------------------------------------- ...
随机推荐
- Android“寄生兽”漏洞技术分析
一.关于app的缓存代码 安卓的应用程序apk文件是zip压缩格式的文件,apk文件中包含的classes.dex文件相当于app的可执行文件,当app运行后系统会对classes.dex进行优化,生 ...
- AngularJS+bootstrap-switch 实现开关控件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python 回溯法 子集树模板 系列 —— 1、8 皇后问题
问题 8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 分析 为了简化问题,考虑到8个皇后不同行,则每一行放置一个皇后,每一行的 ...
- JS跨浏览器的事件处理
1. 事件流 事件:用户或浏览器自身执行的某种动作.如click(点击事件).mouse***(鼠标事件). 事件流:页面中接收事件的顺序,也可理解为事件在页面中传播的顺序. DOM事件流包括三个阶段 ...
- 设计模式 笔记 代理模式 Proxy
//---------------------------15/04/21---------------------------- //Proxy 代理模式-----对象结构型模式 /* 1:意图: ...
- java批量爬取电影资源
摘要 网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源.但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低 ...
- 在 OSX 下使用 supervisor 管理服务
我为什么想用 supervisor 来管理服务呢?因为我在系统管理上属于处女座+任性的气质. OSX 下办公用的是普通用户,我不想在 root 权限下做过多设置污染我的系统. OSX 下的服务管理我感 ...
- vector 简介
vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似, 不同的地方就是:数组是静态分配空间,一旦 ...
- android listview addheaderview viewpager
just set viewPager's onTouchListener,like this: viewPager.setOnTouchListener(new OnTouchListener() { ...
- HDU Ignatius's puzzle
链接 [http://acm.hdu.edu.cn/showproblem.php?pid=1098] 分析: 数学归纳法 f(1) = 18 + ka; 假设f(x) = 5x^13+13x^5+k ...