SQL Artisan多表查询和统计
点击次数:35 次 发布日期:2008-11-26 12:21:28 作者:源代码网
|
源代码网推荐 编写基于几个表的关联查询和统计的确是件烦琐的事情,由于基于字符的描述很多信息难以抽取出来共用,当其他地方需要这种情况的时候又必须重写。为了避免这情况SQL Artisan引用了视图对象,通过视图对象描述数据查询的信息;视图对象有一个最大的好处就是继承,可以从一个已经有的对象(实体对象或视图对象)继承下来扩展新的查询功能描述。实际应用中你可以建立一个基础统计视图对象,然后根据情况派生出具体的统计对象(如:根据不同信息分组,显示那些字段信息等). 源代码网推荐 源代码网推荐 下面是一些简单例程代码: 源代码网推荐 源代码网推荐 订单销售金额统计基础视图对象 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 源代码网推荐 /// 建立一个简单的订单销售金额统计类 源代码网推荐 源代码网推荐 /// </summary> 源代码网推荐 源代码网推荐 [TableMap("", TableType.View)] 源代码网推荐 源代码网推荐 public class OrderStat:HFSoft.Data.ITableView 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 #region ITableView 成员 源代码网推荐 源代码网推荐 public virtual Table GetTable() 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 // TODO: 添加OrderV.GetTable 实现 源代码网推荐 源代码网推荐 return DBMapping.Orders.INNER(DBMapping.Employees, DBMapping.Employees.EmployeeID)& DBMapping.Orders.INNER(DBMapping.OrderDetails, DBMapping.Orders.OrderID)& DBMapping.OrderDetails.INNER(DBMapping.Products, DBMapping.Products.ProductID); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private Double mTotalize; 源代码网推荐 源代码网推荐 [StatColumn("Quantity*[Order Details].UnitPrice*(1-Discount)", StatType.Sum)] 源代码网推荐 源代码网推荐 public Double Totalize 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mTotalize; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mTotalize = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 #endregion 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 按雇员分组统计情况继承实现 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 源代码网推荐 /// 按雇员进行分组统计 源代码网推荐 源代码网推荐 /// </summary> 源代码网推荐 源代码网推荐 [TableMap("", TableType.View)] 源代码网推荐 源代码网推荐 public class EmployeeTotal:OrderStat 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 private int mEmployeeID; 源代码网推荐 源代码网推荐 [ViewColumn("Employees.EmployeeID")] 源代码网推荐 源代码网推荐 public int EmployeeID 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mEmployeeID; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mEmployeeID = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private string mEmployeeName; 源代码网推荐 源代码网推荐 [ViewColumn("FirstName+LastName")] 源代码网推荐 源代码网推荐 public string EmployeeName 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mEmployeeName; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mEmployeeName = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 按产品分组统计继承实现 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 源代码网推荐 /// 按产品进行分组统计 源代码网推荐 源代码网推荐 /// </summary> 源代码网推荐 源代码网推荐 [TableMap("", TableType.View)] 源代码网推荐 源代码网推荐 public class ProductTotal : OrderStat 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 private int mProductID; 源代码网推荐 源代码网推荐 [ViewColumn("Products.ProductID")] 源代码网推荐 源代码网推荐 public int ProductID 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mProductID; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mProductID = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private string mProductName; 源代码网推荐 源代码网推荐 [ViewColumn("ProductName")] 源代码网推荐 源代码网推荐 public string ProductName 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mProductName; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mProductName = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 统计时在不更改条件的情况,你只需要加载不同的描述类型就能实现不同需求的数据查询统计功能。 源代码网推荐 源代码网推荐 Expression exp = new Expression(); 源代码网推荐 源代码网推荐 exp &= new HFSoft.Data.Mapping.NumberField("year(" + DBMapping.Orders.OrderDate.Name + ")", null) == 1997; 源代码网推荐 源代码网推荐 List<EmployeeTotal> empt= exp.List<EmployeeTotal>(); 源代码网推荐 源代码网推荐 List<ProductTotal> prot= exp.List<ProductTotal>(); 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 关联加载相关表信息字段 源代码网推荐 源代码网推荐 当需要加载关联表相关字段信息时,可以建立一个继承于实体对象的视对象;不过也可以根据实现情况建立一个全新的视图对象。 源代码网推荐 源代码网推荐 产品信息视图对象 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 源代码网推荐 /// 产品信息视图对象 源代码网推荐 源代码网推荐 /// </summary> 源代码网推荐 源代码网推荐 [TableMap("",TableType.View)] 源代码网推荐 源代码网推荐 public class ProductsView:Products,HFSoft.Data.ITableView 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 #region ITableView 成员 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 public virtual Table GetTable() 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return DBMapping.Products.INNER(DBMapping.Categories, DBMapping.Categories.CategoryID) 源代码网推荐 源代码网推荐 & DBMapping.Products.INNER(DBMapping.Suppliers, DBMapping.Suppliers.SupplierID); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 #endregion 源代码网推荐 源代码网推荐 private string mCategoryName; 源代码网推荐 源代码网推荐 [ViewColumn("CategoryName")] 源代码网推荐 源代码网推荐 public string CategoryName 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mCategoryName; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mCategoryName = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private string mCompanyName; 源代码网推荐 源代码网推荐 [ViewColumn("CompanyName")] 源代码网推荐 源代码网推荐 public string CompanyName 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mCompanyName; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mCompanyName = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 Expression exp = new Expression(); 源代码网推荐 源代码网推荐 exp &= DBMapping.Suppliers.City == "GuangZhou"; 源代码网推荐 源代码网推荐 exp.List<ProductsView>(); 源代码网推荐 源代码网推荐 为了方便显示,产品视图对象引入了产品类别和供应商信息。 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 以上是通过简单例程介绍SQL Artisan多查询统计功能,组件试图把所有数据输出都以实体对象的方式体现来(主要简化访问操作性);不过SQL Artisan并没有完全支持所有SQL语句的功能,只是实现了大部常用的功能。 源代码网推荐 源代码网推荐 http://www.cnblogs.com/henryfan/archive/2006/10/30/544540.html 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
