編寫基於幾個表的關聯查詢和統計的確是件煩瑣的事情,由於基於字符的描述很多信息難以抽取出來共用,當其他地方需要這種情況的時候又必須重寫。為了避免這情況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