У меня есть список всех различных имен учетной записи префиксов (Az), которые я приобретаю, используяGroupBy SqlFunction на QueryOver
var accounts = this.SessionManager.GetActiveSession().QueryOver<Account>();
var q = accounts.Select(Projections.Distinct(
Projections.SqlFunction("substring",
NHibernateUtil.String,
Projections.Property("Name"),
Projections.Constant(1),
Projections.Constant(1))));
Однако то, что я хочу сделать, это вместо того, чтобы вернуться отчетливый список является группа префиксы и возврат количество учетных записей, которые начинаются с этого префикса, но я не уверен, как выполнять группу, используя запрос, поскольку это не так просто, как стандартный linq.
Причина, по которой я использую QueryOver, а не запрос, потому что по какой-либо причине функция подстроки выполняется в памяти, а не на сервере базы данных.
Это, как я обычно это сделать
var prefixes = (from acc in this.SessionManager.GetActiveSession().Query<Account>()
group acc by acc.Name.Substring(0, 1)
into grp
select new
{
Prefix = grp.Key,
Count = grp.Count()
});
Редактировать Это то, что я пытался, но я получил следующее сообщение об ошибке
Непризнанный вызова метода в выражении SqlFunction ("подстрока ", NHibernateUtil.String, new [] {Property (" Name "), Constant (Convert (1)), Constant (Convert (1))})
var accounts = this.SessionManager.GetActiveSession().QueryOver<Account>().Select(
Projections.Group<string>(x => Projections.SqlFunction("substring", NHibernateUtil.String,
Projections.Property("Name"), Projections.Constant(1),
Projections.Constant(1))),
Projections.Count<string>(x => Projections.SqlFunction("substring", NHibernateUtil.String,
Projections.Property("Name"), Projections.Constant(1),
Projections.Constant(1)))
);
Функция подстроки потребовала дополнительного параметра, но это решило проблему. Большое спасибо – JConstantine