c# - 从不同表中选择的休眠标准

标签 c# sql sqlite nhibernate

我有以下表格模型:



我想要以下SQL命令作为休眠标准:


SELECT * FROM OHER IN所在的单位(SELECT OID FROM Orders在何处
PONumber <> 0按PONumber限制5)


->换句话说:最后5个订单

编辑:

我的映射

Unit.hbm.xml

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="DCGOrderSystem"
                  namespace="DCGOrderSystem.Model">

  <class name="Unit" table="Units">
    <id name="ID">
      <column name="UID" />
      <generator class="native" />
    </id>

    <property name="Division" />
    <property name="Date" />
    <property name="ItemOrderNr" />
    <property name="Description" />
    <property name="Amount" />
    <property name="Price" />
    <property name="CostCenter" />
    <property name="Location" />
    <property name="DeviceGroup" />
    <property name="Comment" />
    <property name="Distributor" />

    <!-- Many-to-one mapping: Employee -->
    <many-to-one name="EmployeeRef" column="EID" cascade="all" />

    <!-- Many-to-one mapping: Order -->
    <many-to-one name="OrderRef" column="OID" cascade="all" />
  </class>

</hibernate-mapping>


Order.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="DCGOrderSystem"
                  namespace="DCGOrderSystem.Model">

  <class name="Order" table="Orders">
    <id name="ID">
      <column name="OID" />
      <generator class="native" />
    </id>

    <property name="Locked" />
    <property name="PONumber" />

    <!-- One-to-many mapping: Units -->
    <bag name="Units" cascade="all" lazy="true">
      <key column="OID" />
      <one-to-many class="Unit" />
    </bag>
  </class>

</hibernate-mapping>


Employee.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="DCGOrderSystem"
                  namespace="DCGOrderSystem.Model">

  <class name="Employee" table="Employees">
    <id name="ID">
      <column name="EID" />
      <generator class="native" />
    </id>

    <property name="Name" />   
  </class>

</hibernate-mapping>


编辑2:

这是我的查询命令:

var query = m_hibernateSession.QueryOver<Model.Order>(() => orderAlias)
                    .JoinAlias(() => orderAlias.ID, () => unitAlias, JoinType.InnerJoin)
                    .TransformUsing(Transformers.DistinctRootEntity)
                    .OrderBy(x => x.PONumber).Desc.Take(5);


谢谢

最佳答案

如果您想要最后五个订单,我将通过稍微不同的查询来解决问题

Select * 
From order o join Units U on O.OID = U.OID
Order by O.PONumber limit 5


在nhibernate中将是这样(未经测试)

Order orderAlias = null;
Unit unitAlias = null;
var query = session.QueryOver<Order>(() => orderAlias)
   .JoinAlias(() => orderAlias.Units, () => unitAlias, JoinType.InnerJoin)
   //.TransformUsing(Transformers.DistinctRootEntity) if you have duplicates
   .OrderBy(x => x.PONumber).Desc.Take(5);


更新

您也可以只加载Order实体。 NHibernate将根据您的映射信息(延迟/急切加载或联接)自动加载所有单元行。

var query = session.QueryOver<Order>().OrderBy(x => x.PONumber).Desc.Take(5);

关于c# - 从不同表中选择的休眠标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16338535/

相关文章:

c# - 旋转 M*N 矩阵(90 度)

c# - X509Certificate2Collection.Find() 方法,使用 FindByTimeValid 标准,不起作用

c# - 如何在 SendMoney coinbase API 中发布数据

python - 在virtualenv中下载sqlite3

c# - 将日志对象保存到 sqlite no id 仅插入一条记录?

javascript - 如何解析 ajax 返回的字符串的 JSON 列表?

sql - 如何将用户定义的函数应用于 BigQuery SQL 中的多个列?

sql - 对多个事务使用一个 SQL 连接

mysql - SQL:在两个表之间连接外键并仅返回项目数;不是实际元素

java - Android sqlite数据库报错SQLiteException no such column