Currently, there's no way of explicitly specifying a left join within the
Linq syntax that's supported by the current (v3) provider.  The approach
recommended by Oskar (below) is the standard way of doing a left join within
Linq, but right now the provider will throw an UnsupportedException if you
try to run it.

I'll push explicit left join support up my todo list, and also take a look
at why the ternary operator approach was failing.

Cheers,

Steve

On Thu, Jun 24, 2010 at 11:09 PM, Oskar Berggren
<[email protected]>wrote:

> This compiles, but is untested. No idea if correct or supported in NH.
> But based on docs this seems like a starting point.
>
> var obj = from p in Session.Query<Project>()
>                      join t in Session.Query<Type>() on p.Type equals
> t into mygroup
>                      from item in mygroup.DefaultIfEmpty()
>                      orderby item.Label
>                      select o;
>
>
> http://msdn.microsoft.com/en-us/library/bb397895.aspx
> http://msdn.microsoft.com/en-us/vbasic/bb737929.aspx#grpjoinleftout
> http://msdn.microsoft.com/en-us/library/bb311040.aspx
>
>
> /Oskar
>
>
> 2010/6/24 Diego Mijelshon <[email protected]>:
> > No, that just sets join fetching. Left.JoinQueryOver changes the criteria
> > "context" to an association, like CreateCriteria.
> >
> >    Diego
> >
> >
> > On Thu, Jun 24, 2010 at 17:52, Mohamed Meligy <[email protected]>
> wrote:
> >>
> >> So, for join fetch the Left.JoinQueryOver(...) is equivalent to
> >> myQueryOver.Fetch( x => x.Ref).Eager ?
> >>
> >> --
> >> Mohamed Meligy
> >> Senior Developer (Microsoft Technologies - Technical Delivery)
> >> Injazat Data Systems
> >> P.O. Box: 8230 Abu Dhabi, UAE
> >> [ Local Time Offset:  GMT +4 ]
> >>
> >> Direct:  +971   2 4045385
> >> Mobile: +971 50 2623624, +971 55 2017 621
> >>
> >> E-mail: [email protected]
> >> Weblog: http://gurustop.net
> >>
> >>
> >> On Fri, Jun 25, 2010 at 12:30 AM, Diego Mijelshon <
> [email protected]>
> >> wrote:
> >>>
> >>> It would actually be
> >>>
> >>>
> >>>
> session.QueryOver<Project>().Left.JoinQueryOver(p => p.Type).OrderBy(t => 
> t.Label).Asc
> >>>
> >>>
> >>>
> >>>
> >>> The problem is, that is equivalent to:
> >>> select project
> >>> from Project project
> >>> left join fetch project.Type as type
> >>> order by type.Label
> >>> ...because QueryOver is just a pretty face for Criteria, and joins in
> >>> Criteria always fetch the association.
> >>> Also, it has none of the benefits of Linq, except the familiar syntax.
> >>>    Diego
> >>>
> >>>
> >>> On Thu, Jun 24, 2010 at 17:05, Mohamed Meligy <[email protected]>
> >>> wrote:
> >>>>
> >>>> You can do left join in the QueryOver API (very similar to LINQ method
> >>>> chaining) you can do something like:
> >>>>
> >>>>> session.QueryOver<Project>().Left.JoinQueryOver(p =>
> p.Type).OrderBy(p
> >>>>> => p.Type.Label).Take(...);
> >>>>
> >>>> (warning: not tested, try also session.QueryOver<ProjectType>() if
> >>>> p.Type doesn't work. I haven't tried the code and there is no XML
> >>>> documentation to advise)
> >>>>
> >>>>
> >>>> Regards,
> >>>>
> >>>> --
> >>>> Mohamed Meligy
> >>>> Senior Developer (Microsoft Technologies - Technical Delivery)
> >>>> Injazat Data Systems
> >>>> P.O. Box: 8230 Abu Dhabi, UAE
> >>>> [ Local Time Offset:  GMT +4 ]
> >>>>
> >>>> Direct:  +971   2 4045385
> >>>> Mobile: +971 50 2623624, +971 55 2017 621
> >>>>
> >>>> E-mail: [email protected]
> >>>> Weblog: http://gurustop.net
> >>>>
> >>>>
> >>>> On Thu, Jun 24, 2010 at 5:43 PM, Diego Mijelshon
> >>>> <[email protected]> wrote:
> >>>>>
> >>>>> Hmmm... it's slightly unexpected as a behavior, although it's
> >>>>> consistent with the equivalent HQL:
> >>>>>   from Project order by Project.Type.Label
> >>>>> It generates an inner join (actually, a select from two tables with a
> >>>>> where clause)
> >>>>>
> >>>>> With HQL you can use explicit left joins:
> >>>>> select project
> >>>>> from Project project
> >>>>> left join project.Type as type
> >>>>> order by type.Label
> >>>>> But I don't know if it's possible with Linq...
> >>>>>    Diego
> >>>>>
> >>>>>
> >>>>> On Thu, Jun 24, 2010 at 08:59, Kakone <[email protected]>
> wrote:
> >>>>>>
> >>>>>> 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]<nhusers%[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]<nhusers%[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]<nhusers%[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]<nhusers%[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]<nhusers%[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]<nhusers%[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]<nhusers%[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