> I'm trying to perform this query on NHibernate 2.1.2 with NHibernate.Linq
> (1.1.0.1001)
> 
> session.Linq<FieldStructure>().Skip(10).Take(10).Count()
> 
> This generates the following SQL
> 
> "NHibernate: SELECT TOP 10 y0_ FROM (SELECT count(*) as y0_,
> ROW_NUMBER() OVER(ORDER BY CURRENT_TIMESTAMP) as __hibernate_sort_row FROM
> FieldStructure this_) as query WHERE query.__hibernate_sort_row >
> 10 ORDER BY query.__hibernate_sort_row"
> 
> This query always returns 0 rows, I know I should be getting 10 rows.
> 
> If I perform the same query without the Count(), I will get 10 rows.
> The SQL generated is...
> 
> "NHibernate: SELECT TOP 10 <list of fields>, ROW_NUMBER() OVER(ORDER BY
> CURRENT_TIMESTAMP) as __hibernate_sort_row FROM FieldStructure this_ left
> outer join Lookup lookup2_ on
> this_.LookupId=lookup2_.LookupId) as query WHERE
query.__hibernate_sort_row
> > 10 ORDER BY query.__hibernate_sort_row"
> 
> Is this a bug?

        Looks like it. The link provider apparently sees the aggregate
expression as the outer query, but that shouldn't be done that way: the skip
and take expressions are consumed by an expression visitor but the values
they get as parameters should be applied to the query / sequence they work
on, and _that_ sequence is then the source of the aggregate expression,
which always works on a separate scope, so it could never be wrapped by a
take.

                FB



Reply via email to