我使用NHibernate,并正尝试找出如何编写一个查询,该searchs所有的名字我的实体, 并列出结果。举一个简单的例子,我有以下几个对象;NHibernate的查询在多个表
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我想创建一个查询,例如说,它并返回所有的宠物主人含“泰德”的名称,或宠物使用含有“泰德”的名称。
这是我要执行的SQL的一个例子:
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%'
当我使用它的标准是这样做的:
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>();
中生成以下查询:
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%'
如何调整我的查询,以便.CreateCriteria(“Dog”)和.CreateCriteria(“Cat”)生成一个OR而不是t他和?
感谢您的帮助。
谢谢,似乎这样做。我在这里找到了一篇文章:http://mattthr.blogspot.com/2010/02/quey-across-join-in-nhibernate.html,并试图尝试 – 2010-04-23 10:20:26