| | 统计查询:
System.Data.DataSet ds = Orders.TBL.INNER(OrderDetails.TBL,OrderDetails._OrderID)
.Where(Orders._OrderDate >= DateTime.Parse("1997-8-1"))
.OrderBy(Orders._EmployeeID.DESC)
.GroupBy(Orders._EmployeeID)
.Select(SqlMath.Sum(OrderDetails._Quantity*OrderDetails.
_UnitPrice*(1-OrderDetails._Discount)).As("account"),Orders._EmployeeID);
foreach(System.Data.DataRow row in ds.Tables[0].Rows)
{
Console.WriteLine(row["account"]);
} |
对象继续
这里的对象继续只是描述对象映射继续关系,通常用于后面所描述的视图对象。在数据查询过程中有经常要获取关联表的某些字段信息;如:在查询订单里需要获取相关雇员的姓名和客户名称,雇员和客户的其他信息是不需要的;这个时候可以继续订单类实现一个新的映射类。
[Table("",TableType.View)]
public class OrderView:Orders
{
[ViewColumn("Employees","FirstName")]
public string EmpFirstName
{
get;
set;
}
[ViewColumn("Employees","LastName")]
public string EmpLastName
{
get;
set;
}
[ViewColumn("Customers","CompanyName")]
public string CompanyName
{
get;
set;
}
}
System.Collections.IList lst
= (Orders.TBL.INNER(Employees.TBL,Employees._EmployeeID)&
Orders.TBL.INNER(Customers.TBL,Customers._CustomerID))
. SelectObject (typeof(OrderView)); |
通过以上对象的映射,组件不会加载多余的字段信息,从而获取更好的加载效率。这里有一个比较关心的问题就是OrderView是否能进行数据更新操作?在上的例子中OrderView是可以进行更新操作的,但只是会更新父类Orders映射部分其他部分不作更新。在操作过程中组件会验测对象的基类(一直找到最顶层),假如检测对象不是由表对象派生下来就不会进行任何更新操作并抛操作异常。
视图对象
视图对象类似数据库中的视图,通过自定义视图对象可以选择性地映射相关字段信息,很多时候映射表的所有字段过于臃肿;视图对象也可能通过表对象派生下来。以下通过视图对象获取雇员的编号和姓名: