DMSFrame 之简单用法(二)

上次说了下DMSFrame的一些查询方式,之前也有好多朋友问了下这个ORM与EF有什么样的区别。

要论区别,我自己也总结了几点。如果有其它朋友知道的,可以回复补充下。

1.不需要编辑的时候需要再次查询数据库,可以直接根据条件去更新。

2.支持分布式数据库,可以在实体上定义数据库,甚至可以在代码上定义数据库。这点好像EF是做不到的

3.支持多种数据库,只需要修改配置就好。

继续我们开发之旅吧。。

 var user = DMS.Create<Adm_User>()
                .OrderBy(q => q.OrderBy(q.UserID))
                .Pager(1, 10);
            Console.WriteLine(user.GetResultSql());

解析如下:

SELECT TOP 10 [t0].[UserID],[t0].[UserName],[t0].[TrueName],[t0].[UserPwd],[t0].[DeptID],[t0].[DeptName],[t0].[UserCode],[t0].[CompanyEmail],[t0].[MobileNum],[t0].[StatusFlag],[t0].[LastLoginTime],[t0].[LoginTimes],[t0].[LastLoginIp],[t0].[ResetPwdFlag],[t0].[CreateTime],[t0].[CreateUser],[t0].[DeleteFlag],[t0].[DeleteTime],[t0].[DeleteUser],[t0].[UpdateUser],[t0].[UpdateTime],[t0].[Remark]
 FROM [Adm_User]  AS  [t0] WITH(NOLOCK)
 ORDER BY  [t0].[UserID]

明眼一看就知道是分页查询,值得注意的是分布查询是必须要有OrderBy字段,

OrderBy(q => q.OrderBy(q.UserID)),注意里面还有一个OrderBy,这也是和EF不同的地方,再看看第二页的情况。
var user = DMS.Create<Adm_User>()
                .OrderBy(q => q.OrderBy(q.UserID.Desc(), q.CreateTime))
                .Pager(2, 10)
                .Select(q => q.Columns(q.UserID, q.UserCode));
            Console.WriteLine(user.GetResultSql());

解析如下:

SELECT [UserID],[UserCode] FROM(SELECT  TOP 20 ROW_NUMBER() OVER(ORDER BY  [t0].[UserID] DESC ,[t0].[CreateTime]) RN,[t0].[UserID],[t0].[UserCode]
FROM [Adm_User]  AS  [t0] WITH(NOLOCK)) [t0]
WHERE RN>10

第二页查询的方式会自动加排序字段进行分页查询的。在查询的时候也会有其它业务需求,只查询我们需要的东西。怎么样,是不是感觉原来查询也可以这么so easy!!

相信这里你也就明白为什么分页查询要排序字段了吧。。

值得说明的事:查询的返回结果可以这几种, ToResult() | 返回DataTable结果;ToList() | 返回类列表结果;ToConditionResult(1) | 返回分页结果(带总项数);

同时还可以返回任意的类列表结果,ToList<T>(); T 可以是任意的class,规则就是与数据库查询出来的字段名称要一致,默认是忽略大小写的,如果需要区分,可以ToList里面加上参数信息

var user = DMS.Create<Adm_User>()
               .GroupBy(q => q.GroupBy(q.UserID, q.UserName))
               .Select(q => new
               {
                   UserID = q.UserID,
                   UserName = q.UserName,
                   CountX = q.LoginTimes.COUNT(),
               });
            Console.WriteLine(user.GetResultSql());
 
时间: 2024-10-11 01:27:51

DMSFrame 之简单用法(二)的相关文章

ios初识UITableView及简单用法二(模型数据)

// // ViewController.m // ZQRTableViewTest // // Created by zzqqrr on 17/8/24. // Copyright (c) 2017年 zzqqrr. All rights reserved. // #import "ViewController.h" #import "ZQRCarGroup.h" @interface ViewController () <UITableViewDataSo

C++ double转string类型以及MFC控件简单用法

这两天项目需要,测试c++库里面内容.生成jar再给Android调用.我没有学过C++,现在开始记录C++简单用法.测试时候一般都是使用mfc程序来测试,要输入值,显示结果吗.我用的编译环境vs2008. 一.double 转string #include <string> CString strResultx; strResultx.Format(_T("x:%.4f\n"), 89.7887878); 转换结果还是放在strResultx 2.两个字符串相连 CStr

Notification(通知) 简单用法

Notification(通知) 是应用程序提醒用户某件事情已经发生了的一种方式,可以在“状态栏”和“通知托盘”中看到它.如我们更新程序的时候,可以通过Notification来实现下载进度. Notification 可以有以下动作来增强用户提醒: 1.在状态栏中显示图标. 2.灯光:手机LED呼吸灯闪烁 3.发出声音提醒. 4.手机震动. 5.在通知托盘中显示更多的信息 一,创建Notification Notification需要使用NotificationManager来管理.Notif

IOS 中block结构的简单用法

自从block出现之后,很多API都开始采用这样的结构,由此可见,block确实有许多优势存在,这里将一些简单用法总结如下: 一.如何声明一个block变量 我们通过^符号来声明block类型,形式如下: void (^myBlock)(); 其中第一个void是返回值,可以是任意类型,中间括号中^后面的是这个block变量的名字,我把它命名为myBlock,最后一个括号中是参数,如果多参数,可以写成如下样式: int (^myBlock)(int,int); 同样,你也可以给参数起名字: in

SQL*Plus break与compute的简单用法

SQL*Plus break与compute的简单用法在SQL*Plus提示符下输出求和报表,我们可以借助break与compute两个命令来实现.这个两个命令简单易用,可满足日常需求,其实质也相当于在编写SQL语句时使用分组及聚合函数.不同的是在报表中的分组的最下方或整个报表的最下方我们可以得到如sum,avg以及自定义的聚合字样. 一.break用法:help break BREAK ----- Specifies where changes occur in a report and th

JAVA使用Logback发送日志到控制台、文件、ELK的最简单用法

一.简述 本文讲JAVA使用Logback发送日志到控制台.文件.ELK的最简单用法. 二.教程 1.新建pom.xml项目引入下列依赖: <dependencies> <!--Begin LogBack Log--> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> <dependency> <groupId>ch.qos.logback<

Numpy的简单用法

Numpy的简单用法 import numpy as np 一.创建ndarray对象 列表转换成ndarray: >>> a = [1,2,3,4,5] >>> np.array(a) array([1, 2, 3, 4, 5]) 取随机浮点数 >>> np.random.rand(3, 4) array([[ 0.16215336, 0.49847764, 0.36217369, 0.6678112 ], [ 0.66729648, 0.86538

python lambda表达式简单用法【转】

python lambda表达式简单用法 1.lambda是什么? 看个例子: g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>>3 当然,你也可以这样使用: lambda x:x+1(1) >>>2 可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为: 1 def g(x):2 return x+1 非常容易理解,在这里lambda简化了函数定义

iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segmentfault.com/blog/alan/1190000002411296 iOS的各种动画相漂亮,相信这是吸引很多人买iPhone的原因之一.不仅如此,这还是吸引我做iOS开发的一大原因,因为在iOS上给界面实现一些像样的动画实在是太轻松了! 这里就介绍一下iOS的block-based an