上次说了下DMSFrame的一些查询方式,以前也有好多朋友问了下这个ORM与EF有什么样的区别。html
要论区别,我本身也总结了几点。若是有其它朋友知道的,能够回复补充下。web
1.不须要编辑的时候须要再次查询数据库,能够直接根据条件去更新。数据库
2.支持分布式数据库,能够在实体上定义数据库,甚至能够在代码上定义数据库。这点好像EF是作不到的分布式
3.支持多种数据库,只须要修改配置就好。spa
继续咱们开发之旅吧。。code
var user = DMS.Create<Adm_User>() .OrderBy(q => q.OrderBy(q.UserID)) .Pager(1, 10); Console.WriteLine(user.GetResultSql());
解析以下:htm
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字段,blog
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!!ip
相信这里你也就明白为何分页查询要排序字段了吧。。
值得说明的事:查询的返回结果能够这几种, 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());
相关下载:http://files.cnblogs.com/files/kingkoo/DMSFrameRights.zip 此版本为之前的一个版本,最新的版本请加群问群主吧
新上传DMSFrame版本文件:http://files.cnblogs.com/files/kingkoo/DMSFrame_Secure20150606.7z