0
這是我第一次將NHibernate用於大型項目,所以請耐心等待。基本上,我需要運行基於5個字段的搜索。迭代NHibernate加入
我想在表格中顯示結果。這是我寫的一個測試,基本上讓所有擁有名爲「DII」的人員進入的客戶端。當我運行它時,我收到一個錯誤消息,說明一些Intakes是空的。
var name = new Name("Alice", "B." "Cooper");
var staff = "DII";
var fileNumber = 12345;
var crit = NHibernateHelper.GetCurrentSession().CreateCriteria(typeof(Client));
var result = crit.CreateAlias("Intakes", "i");
.Add(Restrictions.Like("Name.First", name.First + "%"));
.Add(Restrictions.Like("Name.Middle", name.Middle + "%"));
.Add(Restrictions.Like("Name.Last", name.Last + "%"));
.Add(Restrictions.Eq("i.Staff", staff));
.Add(Restrictions.Eq("i.FileNumber", fileNumber));
.List<Client>();
foreach (var client in result)
{
Assert.IsTrue(client.Intakes.All(i => i.Staff == "DII");
}
但是,它確實返回正確數量的客戶端。我的問題是,如何迭代通過上述ICriteria生成的查詢返回的相關Intakes?
我試圖修改的最後一行是:
Assert.IsTrue(c.Intakes.Where(i => i != null).All(i => i.Staff == "DII"));
而且它工作正常,但生成的SQL是:
SELECT (Client + Intake Join) ...
SELECT FROM IntakeTable ...
SELECT FROM IntakeTable ...
SELECT FROM IntakeTable ...
(for each Intake that was returned with the join)
這意味着它運行的加入,然後獲取所有再次進食,這不是我想要的。