寫基於幾個表的關聯查詢和統計的確是件煩瑣的事情,由於基於字符的描述很多信息難以抽取出來共用,當其他地方需要這種情況的時候又必須重寫。為了避免這種情況SQL Artisan引用了視圖對象,透過視圖對象描述資料查詢的資訊;視圖對像有一個最大的好處就是繼承,可以從一個已經有的對象(實體對像或視圖對象)繼承下來擴展新的查詢功能描述。實際應用中你可以建立一個基礎統計視圖對象,然後根據情況派生出具體的統計對象(如:根據不同信息分組,顯示那些字段信息等).
下面是一些簡單例程代碼:
訂單銷售金額統計基礎視圖物件
/// <summary>
/// 建立一個簡單的訂單銷售金額統計類別
/// </summary>
[TableMap("", TableType.View)]
public class OrderStat:HFSoft.Data.ITableView
{
#region ITableView成員
public
virtual
?
)& DBMapping.OrderDetails.INNER(DBMapping.Products, DBMapping.Products.ProductID);
}
private Double mTotalize;
[StatColumn("Quantity*[Order Details].UnitPrice*(1-Discount)",Stat.Sum
)
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
;
;
[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 set ProductID
{
get
{
return mProductID;
}
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.Suppliping.Products.INNER(DBMapping.Suppliers, DBMapping.Supplipingers.SupplID);
}
#endregion
private string mCategoryName;
[ViewColumn(
"CategoryName")]
public string CategoryName
{
get
{
return mCategoryName;
}
set
{
mCategoryName = value;
}
}
private
string
manyName; [Comp]n Name
;
"
return mCompanyName;
}
set
{
mCompanyName = 值;
} }
}
}
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