利用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元数据实现通用的查询方法
---------------------------------------------------------------------------------------------------- ...
随机推荐
- 20155202张旭 Exp6 信息收集与漏洞扫描
20155202张旭 Exp6 信息收集与漏洞扫描 一.实践目标与内容 1.实践目标: 掌握信息搜集的最基础技能. 具体有: 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现. ...
- 20155233 刘高乐 Exp9 Web安全基础
WebGoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览器输入localhost:8080/WebGoat,进入WebGoat开始实验 Cross- ...
- Spring-data-jpa 学习笔记(一)
Spring家族越来越强大,作为一名javaWeb开发人员,学习Spring家族的东西是必须的.在此记录学习Spring-data-jpa的相关知识,方便后续查阅. 一.spring-data-jpa ...
- Ms.office2010安装教程
下面用到的软件下载地址如下:http://pan.baidu.com/s/1c08cxPI 第一步 1. 将压缩包office2010.rar解压解压后,会出现一个office2010文件夹如图1.1 ...
- C语言学习之结构体
前言 一直以来,C语言的学习都在入门阶段,只用到数组.函数.循环.选择.位运算这些基本的知识,较少用到指针.预处理.结构体.枚举类型.文件操作等这些C语言的精髓内容,现在想想真不敢说自己熟练掌握C语言 ...
- Azure SQL Database Active Geo-Replication 简介
对于数据库的维护来说,备份工作可谓是重中之重.MS Azure 当然也提供了很完善的数据库备份功能.但是在动手创建备份计划前请思考一下备份工作的真实目的.当然首先要保证数据的安全,一般来说定时创建数据 ...
- numpy 初识(一)
基本操作: 读取文件(与pandas读取csv相似): import numpy numpy.genfromtxt("word.txt", delimiter=',', dtype ...
- 关于UNITY学习,给新生建议
没有不可能,只有不努力. 本人自学UNITY,实力不敢称最好,但绝对不是小白,自己独立做出过游戏,AR.(用C#) 1. 导入模型一定要注意坐标,否则会很麻烦.本人因为这个吃了很多盐 2. 学unit ...
- 基于Shader实现的UGUI描边解决方案
基于Shader实现的UGUI描边解决方案 前言 大扎好,我系狗猥.当大家都以为我鸽了的时候,我又出现了,这也是一种鸽.创业两年失败后归来,今天想给大家分享一个我最近研究出来的好康的,比游戏还刺激,还 ...
- [算法总结] 6 道题搞定 BAT 面试——堆栈和队列
本文首发于我的个人博客:尾尾部落 0. 基础概念 栈:后进先出(LIFO) 队列:先进先出(FIFO) 1. 栈的 java 实现 import java.util.Arrays; public cl ...