query - Linq Nhibernate se unió a la izquierda
nhibernate sql query string (1)
No se puede hacer con el proveedor de LINQ, pero puede hacerlo con QueryOver. Algo como:
MemberTheft memberAlias = null;
var result = Session.QueryOver<Theft>()
.Left.JoinQueryOver(x => x.action, () => memberAlias)
.Where(() => memberAlias.memberId == member.id);
Editar: consulta actualizada.
A Theft tiene una propiedad de acción
Esta es la consulta que estoy tratando de obtener NHibernate.Linq para producir:
SELECT * FROM `thefts`
LEFT JOIN memberThefts
ON thefts.id = memberThefts.theftId AND memberThefts.memberId = 1
Quiero obtener una lista de todos los robos donde action.memberId == algún número o simplemente nulo si no encuentra una fila, simple como una consulta pero me ha estado dando una pesadilla todo el día.
thefts = session.Query<Theft>()
.Fetch(x => x.action)
.Where(x => x.action.memberId == member.id)
.ToList();
Esto ejecuta el siguiente SQL:
select theft0_.id as id9_0_,
memberthef1_.memberId as memberId7_1_,
theft0_.name as name9_0_,
theft0_.chance as chance9_0_,
memberthef1_.theftId as theftId7_1_,
memberthef1_.availableTime as availabl3_7_1_
from thefts theft0_
left outer join memberThefts memberthef1_
on theft0_.id = memberthef1_.theftId,
memberThefts memberthef2_
where theft0_.id = memberthef2_.theftId
and memberthef2_.memberId =1 /* ?p0 */
La clase de robo:
public class Theft
{
public virtual byte id { get; set; }
public virtual string name { get; set; }
public virtual byte rank { get; set; }
public virtual byte chance { get; set; }
public virtual MemberTheft action { get; set; }
...
Y es mapeo:
public TheftMap()
{
Table("thefts");
Id(x => x.id);
Map(x => x.name);
Map(x => x.id);
Map(x => x.chance);
References(x => x.action)
.Nullable()
.PropertyRef(x => x.theftId)
.Column("id");
}
Cualquier solución hará HQL, QueryOver, etc.