YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
YbSoftwareFactory 的 YbRapidSolution for WinForm 插件使用CSLA.NET作为业务层,CSLA.NET的一个强大的特性是支持 N-Tiers 部署。只需非常简单的配置就能在本1-Tier部署方式和N-Tiers部署方式之间切换,这个过程无需编写任何额外的代码,这对于 WinForm 和 WPF 等客户端的开发来说是非常重要的特性,更多信息请参考我前面的文章:YbSoftwareFactory 代码生成插件【七】:YbRapidSolution for WinForm 插件生成项目总体架构介绍。但众所周知,VS 在 WinForm 的开发环境下没有提供相应的分页控件,网上很多针对实现的分页控件虽然实现了数据库分页但往往也要丢失一些在WinForm下的重要特性,通用性和易用性都稍差。本文描述了通过 DynamicLinq 来实现非常方便的自定义过滤条件和自定义排序规则的服务器端数据库分页,并提供 DynamicLinq 的代码下载。
YbRapidSolution for WinForm 插件解决方案的界面层使用DevExpress,DevExpress 的 GridContro l控件比 VS 自带的 DataGridView 不知强大多少倍,自定义过滤、分组、统计、列选择等一气呵成,甚至连数据的导出也非常的全面和方便。但如果不进行数据库分页的话往往性能低下,DevExpreess 可以通过实现 IListserver 提升大数量下的性能,但在 N-Tier 模式下实现的难度和复杂程度超乎想象,我们此处将通过采用折中的解决方案。
在我前面介绍的 YbRapidSolution for MVC 插件中,已经使用了 DynamicLinq 来进行查询、分页和排序,而在 WinForm 插件中我们同样使用 DynamicLinq 来实现类似的分页效果。通过使用 DynamicLinq 后,不仅保留了 DevExpress 的GridControl 控件的一些主要特性,性能的提升也是显而易见的。首先来看看几张分页效果的大图:
1、 分页总体效果图(服务层端的数据库分页):

2、 可任意列进行排序

3、可自定义查询条件,注意此处可是跨表查询

4、支持组合查询和其他字段类型

本方案的实现效果很好,也非常灵活,所有的分页数据均来源于服务层而不是直接来源于数据层。更关键的是所需的代码量极少,如下就是本模块的简单的分页调用代码:
1 public OrdersList Fetch(PagerCriteria criteria)
2 {
3 var result = new OrdersList();
4 result.RaiseListChangedEvents = false;
5 SetIsReadOnly(result, false);
6 var data = _repository.Table;
7 if (!string.IsNullOrWhiteSpace(criteria.Filter1))
8 {
9 data = data.Where(criteria.Filter1);
}
result.TotalRowCount = data.Count();
if (string.IsNullOrWhiteSpace(criteria.Sort))
{
criteria.Sort = "OrderID";
}
data = data.OrderBy(string.Format("{0} {1}", criteria.Sort, criteria.Order));
if (criteria.Page <= )
criteria.Page = ;
var items = data.Skip((criteria.Page - ) * criteria.Rows).Take(criteria.Rows).ToList();
foreach (var item in items)
{
result.Add(EntityToBusinessObject(item));
}
result.RaiseListChangedEvents = true;
SetIsReadOnly(result, true);
return result;
同时附上即将实现的一个流程设计器界面:

在下一章中,我们将介绍如何实现属性自动扩展并可方便地从数据库中加载和保存的解决方案。
附件:DynamicLinq 下载地址:DynamicLinq
YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页的更多相关文章
- 通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页 YbSoftwareFactory 的 YbRapidSolution for WinForm 插件使用CSLA.N ...
- YbSoftwareFactory 代码生成插件【十五】:Show 一下最新的动态属性扩展功能与键值生成器功能
YbSoftwareFactory 各种插件的基础类库中又新增了两个方便易用的功能:动态属性扩展与键值生成器,本章将分别介绍这两个非常方便的组件. 一.动态属性扩展 在实际的开发过程中,你肯定会遇到数 ...
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...
- YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性
ASP.NET Web API 可非常方便地创建基于 HTTP 的 Services,这些服务可以非常方便地被几乎任何形式的平台和客户端(如浏览器.Windows客户端.Android设备.IOS等) ...
- (十分钟视频教程)nodejs基础实战教程3:react服务端渲染入门篇
视频截图如下: (具体视频见文末) 前言: 这是小猫的第三篇node教程,本篇内容是由公众号粉丝票选得出的,相信大家对这篇教程是抱有较大希望的,这篇教程由小猫和一位多年的好朋友合作完成(笔名:谷雨,博 ...
- YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由
上一篇介绍了 公文流转系统 的实现,本篇介绍下MVC下动态自定义路由的实现. 在典型的CMS系统中,通常需要为某个栏目指定个友链地址,通过指定友链地址,该栏目的地址更人性化.方便记忆,也有利用于搜索引 ...
- YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计
树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...
- YbSoftwareFactory 代码生成插件【十六】:Web 下灵活、强大的审批流程实现(含流程控制组件、流程设计器和表单设计器)
程序=数据结构+算法,而企业级的软件=数据+流程,流程往往千差万别,客户自身有时都搞不清楚,随时变化的情况更是家常便饭,抛开功能等不谈,需求变化很大程度上就是流程的变化,流程的变化会给开发工作造成很大 ...
- YbSoftwareFactory 代码生成插件【二十二】:CMS基础功能的实现
很多网友建议在YbRapidSolution for MVC框架的基础上实现CMS功能,以方便进行内容的管理,加快前端页面的开发速度.因此花了一段时间,实现了一套CMS内容发布系统并已集成至YbRap ...
随机推荐
- php摇杆Tiger摇奖
先说下整体思路,代码已附下方. 1.递归产生一个非中奖数(即非连续数字:'111','222','333','444','555','666','777','888') 2.点击摇奖,把奖项通过设置的 ...
- 关于div的滚动条滚动到底部,内容显示不全的问题。(已解决)
今天我做了一个带有滚动条,底部有两个按钮的div. 当我拖动滚动条到底部, 按钮没有显示出来. 我看了看我的样式设置,是这样的: /* 内容样式 */ #contentPartDiv{ posit ...
- 使用holder进行内存管理
在C++中,我们使用new 和delete进行自己的内存管理. void test_func() { someType *ptr = new someType; //使用ptr ptr->fun ...
- 使用Java开发高性能网站需要关注的那些事儿
无论大型门户网站还是中小型垂直类型网站都会对稳定性.性能和可伸缩性有所追求.大型网站的技术经验分享值得我们去学习和借用,但落实到更具体的实践上并不是对所有网站可以适用,其他语言开发的网站我还不敢多说, ...
- visual stdio 2015安装配置及原理
安装与配置: 1.先配置好IIS,再安装visual stdio,主要原因系统会自注册.net Framework,若顺序不正确,则需手动注册,步骤: a. IIS可承载的Web核心 b. IIS6 ...
- [skill] C++ delete VS delete []
delete 用来删除 new 返回的对象. 先调用对象的析构,然后释放指针指向的内存. delete[] 用来删除 new [] 返回的对象. 先调用数组中每一个对象的析构,然后释放指针指向的内存.
- ASP.NET Core 添加日志NLog
1.在Nuget上搜索 NLog.Extensions.Logging 安装最新版 2.添加日志配置文件,在项目指定目录下添加配置文件nlog.config,内容添加如下: <?xml vers ...
- CentOS 6安装PostgreSQL
https://zh.wikipedia.org/wiki/PostgreSQL PostgreSQL是自由的对象-关系型数据库服务器(数据库管理系统),在灵活的BSD-风格许可证下发行.它在其他开放 ...
- Wrestling Match---hdu5971(2016CCPC大连 染色法判断是否是二分图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5971 题意:有n个人,编号为1-n, 已知X个人是good,Y个人是bad,m场比赛,每场比赛都有一个 ...
- 转:HAR(HTTP Archive)规范
HAR(HTTP Archive),是一个用来储存HTTP请求/响应信息的通用文件格式,基于JSON.这个格式的出现可以使HTTP监测工具以一种通用的格式导出所收集的数据,这些数据可以被其他支持HAR ...