Я пытаюсь упорядочить свой запрос NHibernate 3.0 Linq динамически на основе имени столбца, хранящегося в строковой переменной.
// The value of this variable can be the name of any property of Document.
string columnName = "column1";
var query = from n in Session.Query<Document>()
where n.DocumentNumber == documentNumber
// how to order by the value of columnName?
select n;
Ключевое слово orderby
принимает строку (или переменную), нокогда я выполняю следующее:
var query = from n in Session.Query<Document>()
where n.DocumentNumber == documentNumber
orderby columnName
select n;
Я получаю это исключение:
не удалось выполнить запрос
select TOP (@p0)
accumulate0_.Id as Id9_,
accumulate0_.DocumentNumber as Documen10_9_
from dbo.Documents accumulate0_
where
accumulate0_.DocumentNumber=@p1
order by @p2 desc
SELECTЭлемент, идентифицируемый номером 1 ORDER BY, содержит переменную как часть выражения, идентифицирующую позицию столбца.Переменные разрешены только при упорядочении по выражению, ссылающемуся на имя столбца.
Я знаю, что есть Библиотека динамических запросов LINQ , которая обеспечивает перегрузку метода расширения .OrderBy
, который принимаетстрока , но это, очевидно, работает только в памяти .Однако при использовании NHibernate 3.0 возникает исключение.
Я пытаюсь, чтобы в операторе ORDER BY
в сгенерированном запросе SQL было указано соответствующее имя столбца, поэтому мне нужно остаться в области NHibernate.
Используя критерии NHibernate, я могу заказать динамически, но, поскольку я использую NHibernate Linq, у меня нет доступа к функциям критериев.