Hibernate HQL индексированные коллекции как тип возврата запроса - PullRequest
0 голосов
/ 08 ноября 2011

Мне нужно сгруппировать данные, которые были извлечены из 4 таблиц, с помощью hql-запроса ниже.Возвращаемый тип NHibernate - это ArrayList с вложенными типами object [], и я могу проходить и приводить его с помощью приведенных ниже предложений GroupBy.

var ratingRefs = session.CreateQuery("select b, x, r, a from Bond b join b.BondRatingXrefs as x join x.Rating as r join r.RatingAgency as a").List();
// var ratingrefs_ = session.CreateQuery("select b.BondID, b.Issuer, b.YieldToMaturity, r.Symbol, a.Name from Bond b join b.BondRatingXrefs as x join x.Rating as r join r.RatingAgency as a").List();

var groupedRatingRefs = ((ArrayList)ratingRefs).ToArray().GroupBy(o => ((Bond)((object[])o).ToArray()[0]).Issuer);

foreach (IGrouping<string, object> issuerGroup in groupedRatingRefs)
{
    var ratingGroups = issuerGroup.GroupBy(s => ((Rating)((object[])s)[2]).Symbol);
    foreach (IGrouping<string, object> bondGroup in ratingGroups)
    {
        foreach (var bond in bondGroup)
        {
            bondReferences.Add(new BondReference
            {
                BondID = ((Bond)((object[])bond).ToArray()[0]).BondID,
                Issuer = ((Bond)((object[])bond).ToArray()[0]).Issuer,
                YieldToMaturity = ((Bond)((object[])bond).ToArray()[0]).YieldToMaturity,
                Rating = bondGroup.Key,
                RatingAgency = ((RatingAgency)((object[])bond).ToArray()[3]).Name
            });
        }
    }
}

Хотя это обеспечивает желаемые результаты, мне интересно, если NHibernateможет извлечь необходимую информацию непосредственно в целевой объект (аналогично проекции LINQ Select).

...