2010-01-28 69 views
1

我有實體A有一個B的IList叫做Bs,而B有一個叫做Cs的C的IList。LINQ到NHibernate不能去到兒童的子女

我想搜索所有其中至少有5個C的A's。於是我就寫了

using (var s = this._sessionFactory.OpenSession()) 
{ 
    IQueryable<A> q = s.Linq<A>(); 
    // some code... 
    if (range.Min.HasValue)      
     q = q.Where(a => a.Bs.Sum(b => b.Cs.Count) >= range.Min.Value); 
    // some code... 
    return q.Select(b=>b).ToArray(); 
} 

但是在執行的代碼(並具有最小範圍變量指定)我得到以下異常:

NHibernate.QueryException:無法解析屬性:Cs的:一個

爲什麼它在A上尋找B的屬性?映射似乎是正確雖然:

A上的(流利)映射表示:

//... 
HasMany(a => a.Bs) 
.Table("Bs") 
.KeyColumn("IdA") 
.Cascade.AllDeleteOrphan() 
.Inverse() 
.Not.LazyLoad(); 
//... 

和B上的映射表示:

//... 
HasMany(b => b.Cs) 
.Table("Cs") 
.KeyColumn("IdB") 
.Cascade.AllDeleteOrphan() 
.Inverse() 
.Not.LazyLoad(); 
References(b => b.A, "IdA") 
.Not.LazyLoad(); 
//... 

終於在C上的映射:

References(c => c.B, "IdB").Not.LazyLoad(); 
+3

你可能想嘗試在NHibernate的樹幹較新的LINQ提供程序。 NHContrib Linq提供程序具有更多有限的功能。 – 2010-01-28 12:25:30

+0

我有NHibernate中繼的最新LINQ提供程序,它不能解決我的問題:((((( – 2010-02-03 20:11:48

回答

1

你不能使用LINQ做NHibernate的2.X

1

LINQ to NHibernate對於簡單查詢很容易。但是,當您需要執行復雜的查詢時(比如這樣的查詢),切換到標準API或HQL通常會更好。您可以使用3種查詢方法,全部使用它們。

這就是說,一旦NHibernate 3.0發佈,它可能會使用LINQ做這個查詢。

+0

所以我明白,這是不可能與最新發布的NHibernate的LINQ提供程序.. – 2010-02-08 16:49:19