If I do this :
Session.Query<Project>().Fetch(p => p.Type);
An outer join is generated.

So, I wrote this :
Session.Query<Project>().Fetch(p => p.Type).OrderBy(p=>p.Type.Label);
But, it doesn't work :-(
I've got an exception : Specified method is not supported...
We can't do an OrderBy (or Count) after the Fetch method.

I tried this :
Session.Query<Project>().OrderBy(p=>p.Type.Label).Fetch(p => p.Type);
The outer join is not generated.

Strange... Isn't it ?
I think I will look at the source code...

On 28 juin, 11:10, Stefan Wenig <[email protected]> wrote:
> While I don't know much about the specific implementation of LINQ 2
> NH, I know the library beneath it (re-linq) and LINQ itself, so let me
> try to help sort out what's broken and what could be done.
>
> The behavior you report is probably unexpected. However, it's not
> necessarily wrong. The semantics of the translation of LINQ to
> (ultimately) SQL are largely undefined. Your query would just fail in
> LINQ 2 objects, so that's not a helpful reference. You could look into
> LINQ 2 SQL, which is sometimes taken as some kind of reference
> implementation.
>
> However, NH translates LINQ to HQL first, and this translation looks
> absolutely reasonable. So to change the default behaviour, we would
> have to either
> - change the behavior of HQL to use outer joins (unlikely, because
> there's probably either a good reason or at least a backwards
> compatibility argument to be made)
> - translate that LINQ to an explicit outer join in HQL
>
> Two workarounds were suggested: using the ternary operator ( ? : ) or
> using explicit outer joins in LINQ (via DefaultIfEmpty). Both could be
> supported in LINQ 2 HQL, but I don't know whether this is planned, or
> for when. Seehttp://blogs.imeta.co.uk/sstrong/archive/2009/12/16/823.aspx
>
> You can always offer to help out on the dev 
> list:http://groups.google.com/group/nhibernate-development
>
> Cheers,
> Stefan
>
> On Jun 24, 3:15 pm, Kakone <[email protected]> wrote:
>
>
>
> > I can't to do it by code because most of the time, I will use it with
> > the Take(x) method.
>
> > For example :
> > Session.Query<Project>().OrderBy(p.Type.Label).Take(10)
>
> > It's a very simple request, I wonder me if I do something wrong or
> > it's a bug of LinqNHibernate.
>
> > On 24 juin, 14:44, Oskar Berggren <[email protected]> wrote:
>
> > > Maybe there are other solutions, but one way is to do ToList() before
> > > OrderBy(). The ordering will then happen in your application, instead
> > > of in SQL. You would need the code from your second try of course, to
> > > avoid null reference exceptions.
>
> > > /Oskar
>
> > > 2010/6/24 Kakone <[email protected]>:
>
> > > > Hello,
>
> > > > I have a project class with a Type property (it's a nullable reference
> > > > to a ProjectType entity).
>
> > > > I want to order like this :
> > > > Session.Query<Project>().OrderBy(p.Type.Label).ToList()
> > > > When I do this, I don't get the objects where Type property value is
> > > > null.
>
> > > > So, I tried to write this :
> > > > Session.Query<Project>().OrderBy(p => p.Type == null ? null :
> > > > p.Type.Label).ToList()
> > > > But, in this case, I've got an exception : "No persister for :
> > > > xx.xxx.EntityBase"
>
> > > > What can I do to get all the objects including those with Type ==
> > > > null ?
>
> > > > Cordially,
> > > > Kakone.
>
> > > > --
> > > > 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 
> > > > athttp://groups.google.com/group/nhusers?hl=en.-Masquerle texte des 
> > > > messages précédents -
>
> > > - Afficher le texte des messages précédents -- Hide quoted text -
>
> > - Show quoted text -- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -

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