Fluent NHibernate: LEFT OUTER JOIN ... AND Query

Xavier Egea

I have the next Fluent NHibernate query using QueryOver:

IQueryOver<Task> query = session
    .QueryOver<Task>()
    .JoinAlias(x => x.Subject, () => subject, JoinType.LeftOuterJoin)
    .JoinAlias(() => subject.Localizations, () => localization, JoinType.LeftOuterJoin)
    .Where(() => localization.Language.Id == languageId || localization.Language.Id == null);
    .Where(x => x.UserId == userId)

This performs the next query:

SELECT * FROM Tasks left outer join Subjects on Tasks.SubjectId = Subjects.IdAsignatura 
left outer join Languages on Subjects.SubjectId=Languages.SubjectId
WHERE Tasks.UserId = xxx 
and (Languages.LanguageId = yyy or Languages.LanguageId = is null)

I would like to avoid the last line using "LEFT OUTER JOIN ... AND" like this:

SELECT * FROM Tasks left outer join Subjects on Tasks.SubjectId = Subjects.IdAsignatura 
left outer join Languages on Subjects.SubjectId=Languages.SubjectId AND Languages.LanguageId = yyy
WHERE Tasks.UserId = xxx 

Is there a way to perform "LEFT OUTER JOIN ... AND" Fluent NHibernate queries?

Radim Köhler

There is one overload of the CreateAlias:

/// <param name="path">Lambda expression returning association path</param>
/// <param name="alias">Lambda expression returning alias reference</param>
/// <param name="joinType">Type of join</param>
/// <param name="withClause">Additional criterion for the SQL on clause</param>
/// <returns>
/// criteria instance
/// </returns>
IQueryOver<TRoot, TSubType> JoinAlias<U>(Expression<Func<U>> path
     , Expression<Func<U>> alias, JoinType joinType
     , ICriterion withClause);

That means, that we can pass the Restriction from WHRE into ON clause

/// instead of this
.JoinAlias(() => subject.Localizations, () => localization, JoinType.LeftOuterJoin)
.Where(() => localization.Language.Id == languageId 
          || localization.Language.Id == null);

/// We can use this:
.JoinAlias(() => subject.Localizations, () => localization, JoinType.LeftOuterJoin
            // the 4th param is appended to ON clause with AND operator
            , Restrictions.Where(() => localization.Language.Id == languageId)
)

The withClause could be injected into the ON part of our SELECT, but always with AND operator. So it can only apply more restrictions than the basic mapped relation.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How to do a double left outer join in Linq query syntax(or fluent)

From Dev

Fluent nHibernate Query => QueryOver, Join, Distinct

From Dev

Left Outer join in Ebean query

From Dev

Left Outer Join in sql query

From Dev

Left Outer join in Ebean query

From Dev

LINQ Fluent API version of left join query

From Dev

Challenging LEFT OUTER JOIN query grouping by MAX

From Dev

Select query with left outer join and sum with group by

From Dev

SQL query with COALESCE and LEFT OUTER JOIN

From Dev

Optimalize SQL query with left outer join and union

From Dev

Slow query with VIEW and LEFT OUTER JOIN

From Dev

SQL query with COALESCE and LEFT OUTER JOIN

From Dev

Query joining null values (left outer join)

From Dev

Using LEFT OUTER JOIN to build query results

From Dev

MySQL - endless running query on LEFT OUTER JOIN

From Dev

How to Write Left Outer join for this SQL query?

From Dev

Issue with my Left outer join query

From Dev

Converting LEFT OUTER JOIN query to Django orm queryset/query

From Dev

Unable to convert SQL Query to LINQ Query for Left Outer Join

From Dev

How to replace a complex SQL MINUS query with LEFT OUTER JOIN equivalent

From Dev

Left outer Join query returns duplicates in SQL Server

From Dev

Flask-SQLAlchemy Left Outer Join Filtered Query

From Dev

Left Outer Join Query Extremely Slow - SQL Server

From Dev

Rails 5 Left Outer Join combined with a WHERE query

From Dev

C# interpret my query as inner join instead of left outer join on what cases this occurs?

From Dev

How to do a left outer join in Entity Framework without using the query syntax?

From Dev

How to get field "bikinMain" values from left outer join on multi sum in master table mysql query

From Dev

JPA+hibernate...BiDirectional association... Instead of lnnerJoin, left outer join fired in query

From Dev

MySQL Query - How do I get a SUM with GROUP BY and WHERE condition and use LEFT OUTER JOIN?

Related Related

  1. 1

    How to do a double left outer join in Linq query syntax(or fluent)

  2. 2

    Fluent nHibernate Query => QueryOver, Join, Distinct

  3. 3

    Left Outer join in Ebean query

  4. 4

    Left Outer Join in sql query

  5. 5

    Left Outer join in Ebean query

  6. 6

    LINQ Fluent API version of left join query

  7. 7

    Challenging LEFT OUTER JOIN query grouping by MAX

  8. 8

    Select query with left outer join and sum with group by

  9. 9

    SQL query with COALESCE and LEFT OUTER JOIN

  10. 10

    Optimalize SQL query with left outer join and union

  11. 11

    Slow query with VIEW and LEFT OUTER JOIN

  12. 12

    SQL query with COALESCE and LEFT OUTER JOIN

  13. 13

    Query joining null values (left outer join)

  14. 14

    Using LEFT OUTER JOIN to build query results

  15. 15

    MySQL - endless running query on LEFT OUTER JOIN

  16. 16

    How to Write Left Outer join for this SQL query?

  17. 17

    Issue with my Left outer join query

  18. 18

    Converting LEFT OUTER JOIN query to Django orm queryset/query

  19. 19

    Unable to convert SQL Query to LINQ Query for Left Outer Join

  20. 20

    How to replace a complex SQL MINUS query with LEFT OUTER JOIN equivalent

  21. 21

    Left outer Join query returns duplicates in SQL Server

  22. 22

    Flask-SQLAlchemy Left Outer Join Filtered Query

  23. 23

    Left Outer Join Query Extremely Slow - SQL Server

  24. 24

    Rails 5 Left Outer Join combined with a WHERE query

  25. 25

    C# interpret my query as inner join instead of left outer join on what cases this occurs?

  26. 26

    How to do a left outer join in Entity Framework without using the query syntax?

  27. 27

    How to get field "bikinMain" values from left outer join on multi sum in master table mysql query

  28. 28

    JPA+hibernate...BiDirectional association... Instead of lnnerJoin, left outer join fired in query

  29. 29

    MySQL Query - How do I get a SUM with GROUP BY and WHERE condition and use LEFT OUTER JOIN?

HotTag

Archive