首页 > 其他分享 >EFore 分页查询 链式封装

EFore 分页查询 链式封装

时间:2023-02-07 16:34:03浏览次数:39  
标签:封装 pageSize int IQueryable EFore ResultSet source 链式 public

此文提供一个初步的封装思路,简化代码编写。

1. 先封装一个 ResultSet 存放查询结果:

    public class ResultSet<T>
    {
        /// <summary>
        /// 总记录数
        /// </summary>
        public int Total { get; set; }

        public List<T> Value { get; set; }
    }

2. 封装三个扩展方法: WhereIf,  IfNotnull,PageQuery

    public static class ExtendMethods
    {
        public static IQueryable<T> WhereIf<T>(this IQueryable<T> source,bool condition, Expression<Func<T, bool>> predicate) 
        {
            if (condition)
            {
                source = source.Where(predicate);
            }
            return source;
        }
        public static IQueryable<T> IfNotNull<T>(this IQueryable<T> source, string condition, Expression<Func<T, bool>> predicate)
        {
            if (!string.IsNullOrEmpty(condition))
            {
                source = source.Where(predicate);
            }
            return source;
        }
        public static ResultSet<T> PageQuery<T>(this IQueryable<T> source, int pageSize,int page)
        {
            var count  =source.Count();
            var data  = source.Skip((page - 1) * pageSize).Take(pageSize).ToList();
            return new ResultSet<T>()
            {
                Total = count,
                Value = data
            };
        }
    }

  3. 使用示例:

  public ResultSet<Users> GetData(int pageSize, int page, string userName, string keyWords = "")
        {
            return _context.Set<Users>
                .IfNotNull(userName, u => u.UserName == userName)
                .WhereIf(!string.IsNullOrWhiteSpace(keyWords), u => u.Name.Contains(keyWords))
                .PageQuery(pageSize, page);
        }

  

 

标签:封装,pageSize,int,IQueryable,EFore,ResultSet,source,链式,public
From: https://www.cnblogs.com/NewBigLiang/p/17098922.html

相关文章

  • ONLYOFFICE文档​ TEXTBEFORE, TEXTAFTER, TEXTSPLIT 公式
    ​公式编辑器与常见的文字处理软件和演示程序配合使用,特别是数学编辑器已经成为当下互联网最常用的软件之一,在各种文档中加入复杂的数学公式和符号,在编辑试卷、书籍等途径上......
  • 封装的原则
    一个类常常就是一个小的模块,应该只让这个模块公开必须让外界知道的内容,而隐藏其他一切内容。进行程序设计时,应尽量避免一个模块直接操作和访问另一个模块的数据,模块设计追......
  • vue3 + ts 封装树形控件
    vue3+ts封装树形控件父组件调用 <TreeFilter label="name" title="部门列表(单选)" :requestApi="getUserDepartment" :defaultValue="treeFilterValue.depar......
  • 数组封装新方法
    //查找数组中符合条件的元素Array.prototype.where=function(condition){varret=[];for(vari=0;i<this.length;i++){if(condition(this[i])){ret.......
  • 客服系统即时通讯IM开发(六)Glang Gorm 执行原生Sql语句增删改查封装库【唯一客服】网站
    在开发在线客服系统的时候,有某些地方需要使用脚本去批量执行SQL语句,这个时候就需要使用简单的执行SQL的封装函数了查询操作是使用的原生的sql库,没用Gorm,原因是Gorm的RawSca......
  • 用Wpf做一个Diagram画板(续2)(包含封装一个控件FlowchartEditor)
    据上一次更新https://www.cnblogs.com/akwkevin/p/15047453.html已经1年有余,本次更新主要参照了一个Blazor的Diagram的画线算法,链接地址:https://github.com/Blazor-Diagra......
  • js画布封装之平铺(排版)
     实现代码:1import{UTILS}from"./Utils.js";2import{CanvasImageDraw,CanvasEvent,CanvasImageScroll,CanvasImageCustom}from"./ElementUtils.js";......
  • axios二次封装,mock前端模拟后端接口
    axios二次封装封装request,然后不用每次遇到接口就使用axios进行调用接口。封装一个基地址,然后每次调用接口的时候,只用写出来自己的函数方法就好。我们基于脚手架进行封装......
  • 【Django drf】视图类APIView之五层封装 ApiView的类属性 drf配置文件
    目录ApiView的类属性drf配置文件之查找顺序drf之请求APIView之请求相关配置drf之响应APIView之响应相关配置Response对象属性视图类序列化类路由基于GenericAPIview写五......
  • Hibernate 自动进行数据封装
    1.前言Hibernate可以构建各种复杂的SQL语句,但其本质都是反射机制结合映射关系完成的。框架也仅是一款程序产品,人为编写的产物。要相信,只要你愿意,你完全可以实现自己的J......