Мое требование - извлечь записи SiteItemOnHand, сгруппировать по Businessunitid, inventoryitemid и получить полную запись SiteItemOnHand в каждой группе, имеющей max (lastmodifiedtimestamp)
Я пытаюсь написать эквивалентный запрос nhibernate для приведенного нижеsql query
Select x.* from
(
Select businessunitid,inventoryitemid,max(lastmodifiedtimestamp) as maxvalue from InventoryItemBUOnHand
group by businessunitid,inventoryitemid HAVING inventoryitemid in (939) and businessunitid=829
) as x
inner join
(
Select businessunitid,inventoryitemid,lastmodifiedtimestamp,inventoryitemonhandid from InventoryItemBUOnHand
where inventoryitemid in (939) and businessunitid=829
) as y
on x.businessunitid=y.businessunitid and x.inventoryitemid =y.inventoryitemid and x.maxvalue=y.lastmodifiedtimestamp
У меня так много ограничений.Мне разрешено использовать только версию Nhibernate 3.0, а также написание SQL-запросов (Критерии) строго запрещено.Я смог написать только половину части запроса, которая ниже.Любая помощь будет оценена.
var query= _session.QueryOver<SiteItemOnHand>()
.Where(x => x.Businessunitid == siteID)
.Where(x => x.End == endDate)
.Where(x => x.CountID != filterCount.ID)
.WhereRestrictionOn(x => x.ItemID).IsIn(itemIdList.ToArray())
.SelectList(list => list
.SelectMax(x => x.LastModifiedTimestamp)
.SelectGroup(x => x.Businessunitid)
.SelectGroup(x => x.ItemId));
Приведенный выше запрос генерирует приведенный ниже SQL-запрос, который возвращает только три столбца, но мне нужна полная запись, потому что после получения записи мне нужно обновить.Мне нужно получить все записи SiteItemOnHand, которые удовлетворяют вышеуказанному запросу.
SELECT max(this_.lastmodifiedtimestamp) as y0_, this_.businessunitid as y1_, this_.inventoryitemid as y2_
FROM InventoryItemBUOnHand this_
WHERE this_.businessunitid = 567 and this_.enddate = '1/31/2019 1:18:17 AM' and not (this_.itemcountid = 958)
and this_.inventoryitemid in (744,755)
GROUP BY this_.businessunitid, this_.inventoryitemid
Любая помощь будет оценена.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.