2

내가 주문 ID가 포함됩니다 IDictionaryNHibernate에이 IDictionary <string,int>

에 쿼리의 다음 문자열을 결과를 변환하려고하고 INT 아래 쿼리는 세 개의 오브젝트 주문에 가입해야 TradedQuantity에게

포함됩니다에 결과를 주조, OrderRevision 및 OrderEvent. 1 주문은 내부가 세 개의 객체에 가입하고 그 순서 이드에 공급 orderids의 목록과 일치하는 모든 순서 객체를 얻을에 어떤 쿼리가 시도되는 것은 많은 orderRevisions에게 많은 orderEvents

을 가질 수 1 OrderRevision을 가질 수 있습니다. 그런 다음 orderId를 기반으로 그룹을 수행하고 orderEvents 객체에서 최신 TradedQuantity를 가져옵니다. LatestTradedQuantity는 최신 OrderEvent에서 TradedQuantity가됩니다. 현재로서는 최신 orderevent는 가장 높은 OrderEventId 값을 가진 것으로 간주 될 수 있습니다.

OrderRevision revisionAlias = null; 
Order orderAlias = null; 

var query = 
      Session.QueryOver<OrderEvent>() 
       .JoinAlias(oe => oe.OrderRevision,() => revisionAlias) 
       .JoinAlias(oe => oe.OrderRevision.Order,() => orderAlias) 
       .Where(x => x.OrderRevision.Order.SourceSystem.Name.ToLower() == sourceSystem.ToLower()) 
       .WhereRestrictionOn(x => x.OrderRevision.Order.Id).IsIn(orderIds.ToList()) 
       .SelectList(list => list.SelectGroup(x => x.OrderRevision.Order.SourceOrderIdentifier) 
        .SelectMax(x => x.Id).Select(x => x.TradedQuantity)) 
       .Select(x => new KeyValuePair<string, int?>(x.OrderRevision.Order.SourceOrderIdentifier, x.TradedQuantity) 
       ); 

이 쿼리는 예상 한대로 수행하지 않습니다. 도와 주시겠습니까 결과가 IDictionary로 캐스팅 될 수 있는지 알려주십시오.

답변

1

으로 질문을 태그 했으므로 대신에 사용하는 것이 좋습니다. Linq에서는 하위 쿼리를 사용하여 각 주문에 대한 "최대"주문 이벤트 ID를 선택한 다음 쿼리하여 사전에 투영합니다.

using System.Linq; 
using NHibernate.Linq; 

... 

var orderEventsIdsQuery = Session.Query<OrderEvent>() 
    .Where(oe => orderIds.Contains(oe.OrderRevision.Order.Id)) 
    .GroupBy(oe => oe.OrderRevision.Order.SourceOrderIdentifier, 
     (soi, oes) => oes.Max(oe => oe.Id)); 

var result = Session.Query<OrderEvent>() 
    .Where(oe => orderEventsIdsQuery.Contains(oe.Id)) 
    .ToDictionary(oe => oe.OrderRevision.Order.SourceOrderIdentifier, 
     oe => oe.TradedQuantity); 

이 작업을 수행해야합니다. QueryOver를 사용하지 않고 QueryOver로 해답을 제시하려고하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 일단 내가 시험해보고 시험해 보면 나는 다시 너에게 올 것이다. – Sike12

+0

감사합니다. Frederic – Sike12

관련 문제