首 页 | 精品电影 | 音乐天堂 | 在线游戏 | Flash MTV | 三湘书屋 | 幽默笑话 | 三湘图库 | 美女写真 | IT知识库 | QQ贴图 | 加入书签

网页制作网络编程图形图象操作系统冲浪宝典软件教学网络安全认证考试通信技术电子商务业内动态书籍教程原码

最近更新 文章分类 多媒体类 精品软件

本站搜索:
您的位置:三湘时空 -> IT知识库 -> 文章分类 -> ASP.NET技巧 -> SQL Artisan多表查询和统计
SQL Artisan多表查询和统计


文章类别:ASP.NET技巧 来源: 作者: 发表日期:2006-11-5 字体:[ ]

小游戏 | 在线影院 | 幽默笑话 | 源码下载 | Flash MTV | 音乐试听 | 书屋 | 美女写真

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

http://www.cnblogs.com/henryfan/archive/2006/10/30/544540.html

上一篇:获得汉字字符串的首个拼音字母的缩写 下一篇:用CSS设计高用户体验的web文字大小
本栏目热门文章
·如何实现无刷新的DropdownList联动效果 2005-10-4
·使用HttpWebRequest向网站模拟上传数据 2005-10-4
·ASP.NET中文件上传下载方法集合 2006-5-28
·当DataSet中包含主/子表时,Update更新步骤 2005-10-6
·分享个极好的无刷新二级联动下拉列表,同样适用与firefox 2005-10-19
·ASP.NET2.0实现无刷新客户端回调 2005-11-13
·在Web DataGrid中当鼠标移到某行与离开时行的颜色发生改变( 2005-10-4
·ASP.NET中实现Flash与.NET的紧密集成 2005-11-21
·关于Asp.net页面Page_Load被执行两次的问题 2005-10-4
·ASP.NET极限:页面导航 (翻译) 2005-10-8
新近更新文章
·Asp.Net中使用水晶报表 2006-11-16
·在 ASP.NET 中用匿名委托简单模拟 AOP 做异常和日志处理 2006-11-16
·ASP.NET 2.0发送电子邮件中存在的问题 2006-11-16
·使用MD5加密注册用户密码的简单示例 2006-11-16
·在ASP.NET页面上轻松整合JavaScript 2006-11-16
·包含实时功能的ASP.NET系统结构 2006-11-16
·一个在移动设备中获取路径的方法 2006-11-9
·总结:今天在MSN Group里面和一些朋友谈ASP.net程序的性 2006-11-9
·Login控件在UpdatePanel内当验证用户信息成功后出现页面 2006-11-9
·ASP.NET AJAX Beta2 调用本地WebService的 2006-11-9
首 页 | 软件发布 | 广告联系 | 下载帮助 | 意见反馈 | 网站地图
  CopyRight? 2002-2004 WWW.SXSKY.NET? All Rights Reserved
三湘时空 站长QQ:82675303 Email: