关于我们 广告服务 社区论坛
设为首页 加入收藏

行业新闻
服 务 器
模版下载
建站指南
冲浪宝典
办公软件
网站运营
操作系统
QQ 专题
网页制作
安全防御
视频教程
网络编程
SEO专区
软件下载
图像设计
Cisco
网页特效
Wap 技术
联盟赚钱
网页素材
 首页 | 企业建站 | 网页制作 | 网站运营 | 网络编程 | 图像设计 | 冲浪宝典 | 操作系统 | SEO专区 | 联盟赚钱 | Cisco

欢迎来到e天下网络首页>>网络编程>>ASPNET>>正文|SQL Artisan多表查询和统计

SQL Artisan多表查询和统计

[ 来路:21kn.com    时间:2007-7-8 17:42:14    点击: ]

 

   编写基于几个表的关联查询和统计的确是件烦琐的事情,由于基于字符的描述很多信息难以抽取出来共用,当其他地方需要这种情况的时候又必须重写。为了避免这情况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语句的功能,只是实现了大部常用的功能。

::::站长友情提示:多花一分钟学点什么都好::::

 

上一篇:在.Net 里用XPath的case-insensitive 的查询  下一篇:获得汉字字符串的首个拼音字母的缩写

 ::热点信息::

 

= = 免责声明 = =

① 欢迎转载我网所刊信息,请注明“来源:E天下网络”。
② 凡本网注明“来源:XXX(非E天下网络)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请在30日内进行。
※联系方式:Airtofly@163.com

::推荐文章::

 

ASP教程:详细学习ASP的内置对象

::图像设计::

 

动态图片搜索家——GIF RUNN
软件搜索利器——FileFerret
实例说明构图要讲规律
Character Builder让你尽展靓
全景图速成者Cool360
三维模型速成工具——Canoma
剪贴专家SmartBoard 32
新世纪的图像处理利器——Ph
更多内容..

 

 

关于我们 广告服务 友情链接 合作伙伴 社区论坛 免责声明

Copyright © 2007   21kn.com Inc. All rights reserved.e天下网络工作室

网站白天客服QQ:26875416 (非24小时)  合作QQ:597004688    粤ICP备06026423号