Привета У меня есть это SQL и должен перевести в NHibernate QueryOverпродукта с последними 4 поставщиков на дате сделки
SELECT S.Number, S.Description, S.BrandDescription, subquery.vendornumber, subquery.vendorname
FROM Stocks.Stock S left join
(select vendorNumber, VendorName, POLID, LastTransactionDate from
(
SELECT top 4 v.Number vendorNumber, v.Name VendorName, PLL.Id POLID, max(por.TransactionDate) as LastTransactionDate,
ROW_NUMBER() OVER(PARTITION BY v.Number ORDER BY max(por.TransactionDate) DESC) AS rk
FROM Purchasing.PurchaseOrderLineItem PLL
inner join Purchasing.PurchaseOrder po on PLL.PurchaseOrderId = po.Id
inner join Purchasing.PurchaseOrderVendor POV on po.Id = POV.PurchaseOrderId
inner join Purchasing.Vendor V on pov.VendorId = v.Id
left outer join Purchasing.PurchaseOrderReceipt POR on PLL.Id = por.PurchaseOrderLineItemId
group by v.Number, v.Name,PLL.Id
order by LastTransactionDate desc
) subquery
where subquery.rk = 1) B on PL.Id = b.POLID
Или просто объяснить это просто увидеть его упрощенной версию
Select * from master m
outer apply (select top 4 * From Details d where m.Id = d.Id order by someColumns desc)o
Я думаю, что мы не может использовать подзапрос в качестве производной таблицы в nhibernate. Если у вас есть предложения, пожалуйста, поделитесь.
Благодаря
В гайковерте NHibernate FROM определяется отображением класса/сущности, JOIN определяется путем сопоставления ссылок. Таким образом, указанный выше SQL-запрос не будет работать. Решением здесь является: 1) Create View - и инкапсулировать всю сложность - нанести на карту его как Entity 2), используя исходный SQL-запрос для получения этих данных. Любое другое решение не подходит для ORM в общем –
Спасибо @ RadimKöhler за ответ. Я выполнил хранимую процедуру, которая работает нормально, но мой босс ничего не говорит о каких-либо вещах вне объектов отображения NHibernate из-за ограничения безопасности. Я также пытался создать два отдельных результата запроса и объединить или присоединиться к этому требованию. Любая идея или предложение? – Ammad
Я бы попытался использовать либо представление, которое затем можно было бы отобразить как сущность, либо комбинацию «C#» - точно так же, как вы сказали. Но дело в том, что такой сложный запрос, который вам нужно создать, просто за пределами возможностей ORM-мира ... извините, чтобы не было лучшего ответа. –