I have a list of all distinct account name prefixes (a-z) which I acquire 
using

    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))));

However what I want to do is instead of returning a distinct list is group 
the prefixes and return the number of accounts that start with that prefix, 
but I am unsure how to perform a group by using query over as it is not as 
straightforward as standard linq.

*The reason I am using QueryOver and not Query is because for some reason 
the substring function is being performed in memory and not on the database 
server.*

*This is how I would usually do it*

    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()
                           });

*Edit* This is what I tried but I received the following error

*Unrecognised method call in expression SqlFunction("substring", 
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)))
                
              );

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/nhusers/-/ZveofSWb2iMJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to