我們正在升級到NH3.1這進展順利 - 一切工作儘可能我們可以告訴現有的代碼。其中一個 從2轉移到NH3的動機一直是利用Linq 支持,並且通常它運行得非常好。不過我 一些更復雜的where子句,特別是當我 要基於一個子集檢查掙扎:NHibernate 3.1 Linq與包含和任何
var results = from r in registrations
where (
from p in persons
where p.ExplicitManagers.Any(m => m.Manager == manager)
select p
).Contains(r.Registrant)
select r;
,其中型號爲:
p
是Person
和registration
r
有Person
p
的註冊人包含ExplicitManager
關聯實體的集合,其中 持有對另一個Person
(經理)的引用。
注意:註冊是IQueryable<Registration>.Query()
和人 在IQueryable<Person>.Query()
。
本質上,我試圖限制註冊到person1
是p
的顯式管理器。我可以通過連接完成此操作,但不能通過 ,Contains
子查詢完成。
我收到以下錯誤:
"System.InvalidOperationException : Sequence contains more than one matching element"
做這個作爲一個子查詢的原因是因爲最終我需要 外部化邏輯檢查經理,使其可重複使用的 (它實際上是更復雜,但我已經簡化了這個例子 ,因爲它是在Contains
內導致悲傷的Any
)。
Contains
似乎沒有任何子查詢時工作正常。 這是我做錯了什麼,或者它是不受支持的東西,或者是一個錯誤,還有另一種達到同樣目的的方式嗎?
非常感謝您的幫助。
是工作正常。當Any出現在子查詢/'Contains'中時似乎只是一個問題 – IThasTheAnswer 2011-05-17 11:59:11
順便說一下,我發現了以下工作:var results = from r in registrations where( from p in persons where where p.ExplicitManagers.Any( m => m.Manager == manager) select p ).Any(x => x == r.Registrant) select r;解決了我眼前的問題 – IThasTheAnswer 2011-05-17 20:02:26