Мне нужно сгруппировать данные, которые были извлечены из 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).