我試圖獲得SQL像下面這樣使用NHibernate的標準API:NHibernate的:Subqueries.Exists不工作
SELECT * FROM Foo
WHERE EXISTS (SELECT 1 FROM Bar
WHERE Bar.FooId = Foo.Id
AND EXISTS (SELECT 1 FROM Baz
WHERE Baz.BarId = Bar.Id)
所以基本上,FOOS有許多酒吧和酒吧有很多Bazes。我想要得到所有帶有Bazes酒吧的Foos。
要做到這一點,一種超然的標準似乎最好的,就像這樣:
var subquery = DetachedCriteria.For<Bar>("bar")
.SetProjection(Projections.Property("bar.Id"))
.Add(Restrictions.Eq("bar.FooId","foo.Id")) // I have also tried replacing "bar.FooId" with "bar.Foo.Id"
.Add(Restrictions.IsNotEmpty("bar.Bazes"));
return Session.CreateCriteria<Foo>("foo")
.Add(Subqueries.Exists(subquery))
.List<Foo>();
然而,這引發異常: System.ArgumentException:無法找到匹配的標準信息提供者:bar.FooId = foo.Id和bar.Bazes不爲空
這是NHibernate的錯誤嗎?有一個更好的方法嗎?