天天看點

NHibernate說探——聚合函數

這裡以Northwind資料庫為示例資料庫

示例資料表:Products

現在隻用産品表中部分字段。

持久類如下:

public class Products

    {

        public virtual int ProductID { get; set; }

        public virtual string ProductName { get; set; }

        public virtual int CategoryID { get; set; }

        public virtual float Price { get; set; }

    }

映射檔案如下:

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Entities">

  <class name="Products" table="Products">

    <id name="ProductID" column="ProductID">

      <generator class="identity"></generator>

    </id>

    <property name="ProductName" column="ProductName" type="String"></property>

    <property name="CategoryID" column="CategoryID" type="Int32"></property>

    <property name="Price" column="UnitPrice" type="Single"></property>

  </class>

</hibernate-mapping>

開始

(一)Avg(平均值)

IQuery q = _session.CreateQuery("select avg(Price) from Products where CategoryID=2");

        return Convert.ToSingle(q.List()[0]);

        查詢類型為2的所有産品的平均售價

        ·對于平均值來說,結果是一個,但傳回的還是一個集合。

(二)Max(最大的)

IQuery q = _session.CreateQuery("select max(Price) from Products");

        return Convert.ToSingle(q.List()[0]);

查詢最大的價格

(三)Min(最小的)

IQuery q = _session.CreateQuery("select min(Price) from Products");

return Convert.ToSingle(q.List()[0]);

查詢最低的價格

(四)Count

IQuery q = _session.CreateQuery("select count(*) from Products");

查詢總數

這裡穿插一下distinct用法。

采上Employees表

查詢城市數目:

IQuery q = _session.CreateQuery("select count(City) from Employees");

查詢不重複的城市數目

       IQuery q = _session.CreateQuery("select count(distinct City) from Employees");

(五)Sum(求和)

IQuery q = _session.CreateQuery("select sum(Price) from Products where CategoryID=2");

求和類别為2的産品的總價格

Order by

(六)Order by

(1) 單屬性排序

IQuery q = _session.CreateQuery("select Price from Products p order by Price");

        return q.List<float>();

(2)  多屬性排序

IQuery q = _session.CreateQuery("select Price from Products p order by Price,ProductID desc");

    return q.List<float>();

(七)Group by

(1)單屬性分組

IQuery q = _session.CreateQuery("select CategoryID from Products group by CategoryID");

return q.List<int>();

以産品類别分組,這裡要注意的是傳回的類型。在上一篇中我說明了這裡的了解方式。

(2)多屬性分組及聚合

IQuery q = _session.CreateQuery("select CategoryID,count(*) from Products group by CategoryID");

return q.List<object[]>() as List<object[]>;

這裡以産品類别分組,并取得每個類别的數目。這裡得到的是一個多對象多屬性集合。可以得到一個object資料組的泛型集合。對于這種類型的轉化,在上一篇中已經說明。

(3)Having屬性

IQuery q = _session.CreateQuery("select CategoryID,count(*) from Products group by CategoryID having count(*)>10");

     return q.List<object[]>() as List<object[]>;

這裡以産品類别分組,并取得每個類别的數目,且類别産品數目在10個以上的保留。

這是HQL查詢,是支援having子句的。

部落格園大道至簡

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

轉載請注明:部落格園

繼續閱讀