leo*_*n22 5 c# sqlite nhibernate hibernate
我试图检索最后5个订单,但我得到了最后5个单位!
Model.Order orderAlias = null;
Model.Unit unitsAlias = null;
Model.Employee employeeAlias = null;
IList<Model.Unit> itemList = null;
using (m_hibernateSession.BeginTransaction())
{
var query = m_hibernateSession.QueryOver<Model.Unit>(() => unitsAlias)
.JoinAlias(() => unitsAlias.OrderRef, () => orderAlias, JoinType.InnerJoin)
.JoinAlias(() => unitsAlias.EmployeeRef, () => employeeAlias, JoinType.InnerJoin);
// add additional filters if set
if (propertiesNames.Keys.Contains("Employee")) query.Where(Restrictions.On(() => employeeAlias.Name).IsLike( "%" + (string)propertiesNames["Employee"] + "%"));
if (propertiesNames.Keys.Contains("Division")) query.Where(() => unitsAlias.Division == (string)propertiesNames["Division"]);
query.Where(() => orderAlias.PONumber != 0).OrderBy(() => orderAlias.PONumber).Desc.Take(5);
itemList = query.List<Model.Unit>();
}
Run Code Online (Sandbox Code Playgroud)
获得最近5个订单的单位需要哪些更改?
谢谢
这是解决方案:
Model.Order orderAlias = null;
Model.Unit unitsAlias = null;
Model.Employee employeeAlias = null;
IList<Model.Unit> itemList = null;
using (m_hibernateSession.BeginTransaction())
{
IQueryOver<Model.Order, Model.Order> orderQuery = m_hibernateSession.QueryOver<Model.Order>();
// order related filters
if (propertiesNames.Keys.Contains("OrderPONumber")) orderQuery.Where(o => o.PONumber == Int32.Parse((string)propertiesNames["OrderPONumber"]));
// retrieve amount of orders (e.g. 5)
orderQuery.Where(o => o.PONumber != 0).Select(o => o.ID).OrderBy(o => o.PONumber).Desc.Take(amount);
int[] orderIDList = orderQuery.List<int>().ToArray(); // get ID list of filtered orders
IQueryOver<Model.Unit, Model.Unit> query = m_hibernateSession.QueryOver<Model.Unit>(() => unitsAlias)
.WhereRestrictionOn(o => o.OrderRef.ID).IsIn(orderIDList) // set order ID range
.JoinAlias(() => unitsAlias.EmployeeRef, () => employeeAlias, JoinType.InnerJoin);
// additional filters
if (propertiesNames.Keys.Contains("CostCenter")) query.Where(() => unitsAlias.CostCenter == (string)propertiesNames["CostCenter"]);
if (propertiesNames.Keys.Contains("Employee")) query.Where(Restrictions.On(() => employeeAlias.Name).IsLike( "%" + (string)propertiesNames["Employee"] + "%"));
itemList = query.List<Model.Unit>();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
152 次 |
最近记录: |