Consulta de NHibernate en varias tablas
Estoy usando NHibernate, y estoy tratando de descubrir cómo escribir una consulta, que busca todos los nombres de mis entidades y enumera los resultados. Como un simple ejemplo, tengo los siguientes objetos;
public class Cat {
public string name {get; set;}
}
public class Dog {
public string name {get; set;}
}
,public class Owner {
public string firstname {get; set;}
public string lastname {get; set;}
}
Eventaully Quiero crear una consulta, por ejemplo, que devuelva a todos los dueños de mascotas con un nombre que contenga "ted", O mascotas con un nombre que contenga "ted".
Aquí hay un ejemplo del SQL que quiero ejecutar:
SELECT TOP 10 d.*, c.*, o.* FROM owners AS o
INNER JOIN dogs AS d ON o.id = d.ownerId
INNER JOIN cats AS c ON o.id = c.ownerId
WHERE o.lastname like '%ted%'
OR o.firstname like '%ted%'
OR c.name like '%ted%'
OR d.name like '%ted%'
Cuando lo hago usando criterios como este:
var criteria = session.CreateCriteria<Owner>()
.Add(
Restrictions.Disjunction()
.Add(Restrictions.Like("FirstName", keyword, MatchMode.Anywhere))
.Add(Restrictions.Like("LastName", keyword, MatchMode.Anywhere))
)
.CreateCriteria("Dog").Add(Restrictions.Like("Name", keyword, MatchMode.Anywhere))
.CreateCriteria("Cat").Add(Restrictions.Like("Name", keyword, MatchMode.Anywhere));
return criteria.List<Owner>();
Se genera la siguiente consulta:
SELECT TOP 10 d.*, c.*, o.* FROM owners AS o
INNER JOIN dogs AS d ON o.id = d.ownerId
INNER JOIN cats AS c ON o.id = c.ownerId
WHERE o.lastname like '%ted%'
OR o.firstname like '%ted%'
AND d.name like '%ted%'
AND c.name like '%ted%'
¿Cómo puedo ajustar mi consulta para que .CreateCriteria ("Dog") y .CreateCriteria ("Cat") generen un OR en lugar del AND?
gracias por tu ayuda.