That makes sense.
This would be a pretty common scenario i would think.

Thanks for the reply.

Adam

On Feb 13, 9:11 pm, "Richard Brown \(gmail\)"
<[email protected]> wrote:
> Hi Adam,
>
> The short answer is 'yes'.  QueryOver behaves the same as ICriteria in this
> example ... adding conditions to the query changes the query itself.
>
> ICriteria has a corresponding CriteriaTransformer class which can be used to
> clone the criteria for exactly this sort of thing.  I'll have a think and
> see if we need a QueryOverTransformer class to do something similar.
>
> IQueryOver does allow you access to the underlying ICriteria, so one option
> might be to do something like this:
>
> var users =
>     mySession.QueryOver<User>()
>         ...
>         .OrderBy(x => x.LastName).Asc
>         .Skip(page * pageSize)
>         .Take(pageSize);
>
> var pagedUsers = users.List();
>
> var count =
>     CriteriaTransformer.Clone(users.UnderlyingCriteria)
>         .ClearOrders()
>         .SetProjection(Projections.RowCount())
>         .UniqueResult<int>();
>
> Hope that helps, and I'll see about getting a QueryOverTransformer (and
> probably IQueryOver.ClearOrders()) added to NH.
>
> Richard
>
> --------------------------------------------------
> From: "Schotime" <[email protected]>
> Sent: Friday, February 12, 2010 9:45 PM
> To: "nhusers" <[email protected]>
> Subject: [nhusers] QueryOver issues
>
>
>
> > Was trying out the new QueryOver since Linq doesn't have fetch yet,
> > but i received a different response than expected.
>
> >            var users =
> > MvcApplication.SessionFactory.GetCurrentSession()
> >                .QueryOver<User>().Fetch(x=>x.Roles).Eager;
>
> >            if (!_userSession.IsUserInRole(UserRoles.Superuser))
> >                users = users.Where(x => x.Company == user.Company);
>
> >            int count =
> > users.Select(Projections.Count("id")).UniqueResult<int>();
>
> >            var pagedUsers = users.OrderBy(x =>
> > x.LastName).Asc.Skip(page * pageSize).Take(pageSize).List();
>
> > to which i receive this error
>
> > Column "Users.LastName" is invalid in the ORDER BY clause because it
> > is not contained in either an aggregate function or the GROUP BY
> > clause.
>
> > Now in linq this runs too queries but it looks like QueryOver doesn't
> > return the instance, but modifies the existing one. Is this correct?
> > Do i need to repeat some logic to get the count as well?
>
> > Adam
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "nhusers" group.
> > 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.

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
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