Smark.Data 灵活的查询描述
使用Smark.Data进行数据查询时必须通过对象来描述,其主要描述信息包括查询来源于那些表和需要那些信息等,即使平常的最常面对的关联查询,数据汇总查询等都可以通过实体描述来完成.因此实体描述在组件中起到一个非常重要的作用,可以说所有数据处理都必须经过实体描述.以下是简单地介绍Smark.Data的实体描述能完成那些数据查询工作.
[Table]interface ICustomers{[ID][IDENTITY]string CustomerID { get; set; }[Column]string CompanyName { get; set; }[Column]string ContactName { get; set; }[Column]string ContactTitle { get; set; }[Column]string Address { get; set; }[Column]string City { get; set; }[Column]string Country { get; set; }[Column]string Phone { get; set; }[Column]string Region { get; set; }}
以上是描述一个简单的客户信息,不过想要这个接口生自动生成对应的实体类需要安装一个插件,详细查看Smark.Data.I2MGenerator,最终生成的实体类是接口缺少I的名称。定义后就可以针对这个实体查询
Expression exp = new Expression();if (!string.IsNullOrEmpty(FirstName))exp &= Modules.Employee.firstName.Like(FirstName + "%");if (!string.IsNullOrEmpty(LastName))exp &= Modules.Employee.lastName.Like(LastName + "%");if (!string.IsNullOrEmpty(City))exp &= Modules.Employee.city == City;if (!string.IsNullOrEmpty(Region))exp &= Modules.Employee.region == Region;Records = exp.List<Modules.Employee>();
自定义对象查询
之前的查询是把表中所有信息填充到Employee对象中,在实际应用很多逻辑处理只是需要获某些信息,如果都获取所有信息显然是不可取的做法.组件虽然不提供填充到匿名对象,但可以针对自定义对象填充.如果只想获取Employee的id,firstname,lastname等字段只需要定义以下对象即可
public class EmpNames{public string EmployeeID { get; set; }public string FirstName { get; set; }public string LastName { get; set; }}
使用的时候调用相关重载版本方法
Expression exp = new Expression();foreach (EmpNames item in exp.List<Employee, EmpNames>()){Console.WriteLine(item.FirstName);}
以上查询虽然是针对Employee对象,但最终生成的SQL只会包括EmpNames描述的字段信息,其他字段并不会生成到select中.
关联查询
在实际应用中关联查询是比较普通的需求,如果只对针对单表查询的话,如果组件不支持那在项目用中使用就失去了他的意义.组件虽然不具备LINQ TO SQL那种关联查询语法,但通过另外的方式来达到相同的目的,组件的实全描述完全具备描述一个关联查询的能力.以下是订单明细信息和产品关联获取相关信息的简单描述:
[Table(" OrderDetails inner join products on OrderDetails.productid= products.productid")]public interface IOrderDetailView{[Column]string ProductName { get; set; }[Column("OrderDetails.UnitPrice")]decimal UnitPrice { get; set; }[Column]decimal Quantity { get; set; }[Column]decimal Discount { get; set; }}
可以通过以下查询得到某订单的明细信息:
Record = (Modules.Order.orderID == OrderID).ListFirst<Modules.OrderView>();
描述关联查询其实很简单,只需要在Table描述里定义关联表的信息描述即可,然后实体成员定义需要加载的字段信息,如果存在不明确的情况定义信息具体来源即可.
汇总统计描述
既然实体可以描述关联查询,那汇总统计查询也可以通过实体来描述这样一个查询需求,以下是统计各城市客户订单数量描述
[Table("customers inner join orders on customers.customerid=orders.customerid")]public interface ICustOrderGroupByCity{[Column]string Country { get; set; }[Column]string City { get; set; }[Count]int Count { get; set; }}只需要使用Expression的List方法就能汇总表中的相关信息
Expression exp = new Expression();var empviews = exp.List<CustOrderGroupByCity>();实际应用可以通过Expression添加条件来实现基于条件的汇总统计
转载于:https://www.cnblogs.com/smark/archive/2012/08/12/2635613.html
Smark.Data 灵活的查询描述相关推荐
- Smark.Data实体默认值描述
在数据设计的时候会针对一些字段设置默认的值,Smark.Data同样支持这样的功能,组件通过在属性中描述一个Value属性来告诉组件这个值如果在没有设置的情况应该提供怎样的值.组件提供一个描述的基类, ...
- Smark.Data 功能强大又灵活的Expression
Expression对象是Smark.Data的核心对象,虽然Expression是个条件对象,但它所具备的功能是你想象不到的:),以下把Expression的功能列出来. public RESULT ...
- Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第一部分)
2019独角兽企业重金招聘Python工程师标准>>> 开发人员在开发数据库应用时经常要用到数据表查询.在Xqk.Data的第一个示例中,我们就使用了SelectAll方法来获取数据 ...
- Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第三部分:SqlField)
2019独角兽企业重金招聘Python工程师标准>>> 上一篇<丰富的.灵活的查询方法(第二部分:适应不同数据库系统的查询)>中提到,为适应不同的数据库系统,Xqk.Da ...
- Smark.Data 值转换器
组件支持属性转换描述,主要用于对象属性值和数据存储之前的转换,如常见的枚举和数值,枚举和字符,用户密码等信息转换存储.实际上也可以扩展更灵活的转换如对象关联字段转换,对象序列化转等等. 在Smark. ...
- 开源数据访问组件Smark.Data 1.8
Smark.Data一直强调以最简单和高效的方式访问数据库,在这个版本中组件引入了Query<T>对象,它是一个查询值描述对象,通过它可以更方便地进行数据查询并获取结果.组件会分析T的具体 ...
- Smark.Data
http://www.ikende.com/smarkdata.aspx Smark.Data是基于Ado.net实现的数据访问组件,提供基于强类型的查询表达式进行灵活的数据查询,统计,修改和删除等操 ...
- Smark.Data 1.5更新详解
由于一直忙于Beetle的开发和优化,Smark.Data组件已经有很长一段时间更新.这段时间发现Smark.Data在某些情况下不足,而这些情况又比较普遍所以进行了1.5版的更新.其更新的主要功能包 ...
- 开源数据访问组件Smark.Data 1.8入门编
本章节主要讲述如何使用Smark.Data 1.8进行快速的数据库应用开发,主要内容包括配置,执行SQL和存储过程等基础的数据操作. 配置 在组件使用之前必须进行一个初始化配置,主要配置数据访问设备和 ...
最新文章
- 【FFmpeg】AVPacket的使用详解
- 收集一些好的技术文档
- 计算机山西特岗考试题库,山西特岗历年试题
- php检测函数是否存在函数 function_exists
- android导出excel文件名称,android 导出数据到excel表格文件
- 前端---JavaScript基础3
- Reindex SQL Server DB table
- 别人运行的好好的R代码,到我这怎么就冲突了?
- (32) css—opcity属性
- 【2】二级C语言中那些易错的概念题
- 视频标签- video 音频标签- audio
- 2017-09-26 10:45:51.905 ERROR 9704 --- [nio-8080-exec-5] com.linktrust.aspect.AopLogger :
- MyBatis源码阅读(五) ---Mapper接口的获取过程
- NB-IOT (2)---移远BC26模块模组快速入门
- 如何使用PS更换证件照背景色
- 数仓建设保姆级5W字教程,离线实时一网打尽(理论+实战)
- Ubuntu18.04安装redmine+mysql+nginx+Passenger
- 黑群晖内网穿透【免费无公网IP】
- 【车载以太网】【SOMEIP】Wireshark测试someip
- 给你的Pycharm装一个漂亮的“皮肤“
热门文章
- Spring Framework 6正式发布,携JDK 17Jakarta EE开启新篇章
- 李笑来《韭菜的自我修养》摘录(1)
- 算法题:购买股票(2次交易)
- 逆向分析 Android 程序
- libcef学习最详细的入门资料系列之一 :libcef基本的入门知识
- python城市提取_使用python从文本中提取城市名称
- 【微语】第八周(01.04~01.10)
- 设置默认网关端口 android,IP设置默认网关的方法 | 192.168.1.1手机登陆
- excel宏字符串连接mysql_Excel 访问Sql 数据库的连接字符串
- 概率论与数理统计基本知识点总结