我们正在升级到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