2010-05-03 32 views
5

Busco para crear una combinación externa izquierda Nhibernate consulta con múltiples en los estados parecido a esto:NHibernate combinación externa izquierda

SELECT 
    * 
FROM [Database].[dbo].[Posts] p 
LEFT JOIN 
    [Database].[dbo].[PostInteractions] i 
ON 
    p.PostId = i.PostID_TargetPost And i.UserID_ActingUser = 202  

He estado jugando con la critera y alias, pero no he Tuve suerte descubriendo cómo hacerlo. ¿Alguna sugerencia?

Respuesta

12

De hecho, lo descubrí. Que tiene que hacer un cheque por nula

.CreateCriteria("Interactions", "i", NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
      .Add(Expression.Or(Expression.Eq("i.ActingUser", user), Expression.IsNull("i.ActingUser"))) 

esto crea una combinación izquierda de Identificación del targetpost y luego elimina todas las interacciones de los usuarios no nulos/no.

0

Pasé mucho tiempo revisando todo tipo de publicaciones que no hacían lo que necesitaba y su publicación es la más cercana a la que estaba buscando.

De mis pruebas (con nHibernate 3) su consulta no es correcta. En realidad sus criterios se parece más a esto en SQL:

SELECT * 
FROM [Posts] p 
LEFT JOIN [PostInteractions] i 
    ON p.PostId = i.PostID_TargetPost 
WHERE (i.UserID_ActingUser = 202 OR i.UserID_ActingUser IS NULL) 

que devuelve mensajes/interacciones sólo cuando ActingUser de la interacción es 202 o que no existe interacción para el puesto.

Después de mucho más pruebas de que finalmente lo descubrí ...

Prueba esto (vb.net):

session.CreateCriteria(Of Posts)("p") _ 
.CreateCriteria("Interactions", "i", _ 
       NHibernate.SqlCommand.JoinType.LeftOuterJoin, _ 
       Expression.Eq("i.ActingUser", user)) 

Hay una sobrecarga de la función createCriteria utilizando un "withClause". Eso funcionó perfectamente para mí y creo que es lo que estás buscando también.

sé del tema bastante viejo, pero si puede ayudar a alguien más ....

Además, para grandes ejemplos de consultas Nhibernate (que fue una gran ayuda para mí): http://ayende.com/blog/4023/nhibernate-queries-examples

Diviértete !

Cuestiones relacionadas