简化多个nhibernate查询

时间:2017-09-01 11:02:18

标签: c# linq nhibernate

我正在对两个不同的表进行查询。 在第一个查询中,我得到一些ID,然后我必须在另一个表中检查。 然后我再次使用第二个查询的结果进行第一次查询。

这可能是最好的方法。

但我还没有找到解决问题的好方法。所以一些帮助将不胜感激。

IntOrderInvoiceCostOut y = null;
var list = session.QueryOver<IntOrderInvoiceCostOut>(() => y)
                .Where(x => x.IntegrationHandleDate == null)
                .Select(Projections.Distinct(Projections.Property(() => y.Externalid)))
                .List<string>();
var nonPreliminaryOrders = session.QueryOver<RefImplOrderEntity>()
                .WhereRestrictionOn(x => x.ExternalId).IsIn(list.ToList())
                .Where(x => x.StatusTypeId != 95)
                .Select(x => x.ExternalId)
                .List<string>();
var finalList = session.QueryOver<IntOrderInvoiceCostOut>()
                .WhereRestrictionOn(x => x.Externalid).IsIn(nonPreliminaryOrders.ToList())
                .Where(x => x.IntegrationHandleDate == null)
                .OrderBy(x => x.IntegrationCreateDate)
                .Asc
                .List();

代码有效......但我真的很难看。

1 个答案:

答案 0 :(得分:0)

你可以使用detacheCriteria。我已经省略了几个条件,你可能需要根据你的要求稍微加倍。

例如

                IntOrderInvoiceCostOut y = null;
var list = QueryOver.Of<IntOrderInvoiceCostOut>(() => y)
                .Where(x => x.IntegrationHandleDate == null)
                .Select(Projections.Distinct(Projections.Property(() => y.Externalid)))
                .DetachedCriteria;


var nonPreliminaryOrders = QueryOver.Of<RefImplOrderEntity>()
                            .Where(Subqueries.PropertyIn(nameof(RefImplOrderEntity.ExternalId), list));
                              .Select(x => x.ExternalId)
                            .DetachedCriteria



var finalList = session.QueryOver<IntOrderInvoiceCostOut>()
                    .Where(Subqueries.PropertyIn(nameof(IntOrderInvoiceCostOut.ExternalId), nonPreliminaryOrders));
                    .List();
相关问题