У меня есть таблица в 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)
Я пробовал разные типы в актерском составе, и ни один из них не дал правильного результата.Все остальное, что мне нужно сделать с отображением, работает нормально.
Есть предложения?