У меня есть таблица в MySQL, в которой есть строковый столбец «Id» в форме «Xnnnn», где nnnn — число.
Я хочу найти наибольший определенный nnnn. Так что я:
var c = s.CreateCriteria(typeof(Item))
.AddOrder(Order.Desc(
Projections.Cast(
NHibernateUtil.Int32,
Projections.SqlFunction("substring", NHibernateUtil.String,
Projections.Property("Id"),
Projections.Constant(2), Projections.Constant(10)))
))
.SetProjection(Projections.Property("Id"))
.SetMaxResults(1)
.List<string>();
Но NHibernate генерирует SQL:
SELECT this_.Id as y0_ FROM `Item` this_
ORDER BY cast(substring(this_.Id, ?p0, ?p1) as INTEGER) desc limit ?p2
Что MySQL не любит... он настаивает на:
cast(substring(this_.Id, ?p0, ?p1) as SIGNED INTEGER)
Я пробовал разные типы в актерском составе, и ни один из них не дает правильного результата. Все остальное, что мне нужно сделать с отображением, работает просто отлично.
Какие-либо предложения?