程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> SQL Artisan多表查詢和統計

SQL Artisan多表查詢和統計

編輯:.NET實例教程

   編寫基於幾個表的關聯查詢和統計的確是件煩瑣的事情,由於基於字符的描述很多信息難以抽取出來共用,當其他地方需要這種情況的時候又必須重寫。為了避免這情況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
  
&nbs   
   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 
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved