我们正在升级到NH3.1,目前进展顺利 - 据我们所知,所有现有代码都可以正常工作。从2升级到NH3的动机之一是利用Linq支持,总体而言效果非常好。然而,在处理一些更复杂的where子句时,我遇到了困难,特别是当我想基于子集合进行检查时:
模型如下:
注意:registrations 是一个
实质上,我试图将注册限制在
我得到了以下错误:
当没有 Any 子查询时,
非常感谢您能够提供的任何帮助。
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
(经理)的引用。注意:registrations 是一个
IQueryable<Registration>.Query()
,persons 在一个 IQueryable<Person>.Query()
中。实质上,我试图将注册限制在
person1
是 p
的显式经理的地方。我可以通过联接来完成这个操作,但不能通过 Contains
子查询来完成。我得到了以下错误:
之所以将这个操作作为子查询是因为最终需要将检查经理的逻辑外部化,使其可重复使用(实际上它更复杂,但我已经为此例子简化了它,因为"System.InvalidOperationException : Sequence contains more than one matching element"
Any
在 Contains
中导致麻烦)。当没有 Any 子查询时,
Contains
似乎工作得很好。我是做错了什么吗?还是说这是不支持的或者是一个 bug?是否有其他方法可以实现相同的功能?非常感谢您能够提供的任何帮助。