我使用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