我们正在升级到NH3.1,这很顺利 - 就现有代码而言,一切正常.从2开始转向NH3的动机之一就是利用Linq的支持,并且通常它的工作非常好.但是我正在努力处理一些更复杂的where子句,特别是当我想根据子集合进行检查时:
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;
Run Code Online (Sandbox Code Playgroud)
模型所在的位置是:
pa Person和a registration r具有类型的注册人Person
p包含一组ExplicitManager关联实体,这些关联实体持有对另一个Person(管理者)的引用.
注意:注册是一个IQueryable<Registration>.Query()和一个人IQueryable<Person>.Query().
基本上我试图将注册限制在哪里person1
是一个明确的经理p.我可以通过连接而不是通过Contains子查询来完成此操作.
我收到以下错误:
"System.InvalidOperationException:Sequence包含多个匹配元素"
这样做作为子查询的原因是因为最终我需要外化逻辑以检查管理器使其可重用(实际上它更复杂但是我已经简化了这个例子,因为它是Any在一个Contains导致它的内部悲痛).
Contains在没有使用Any的子查询时似乎工作正常.这是我做错了什么,或者它是不支持的东西还是一个错误,还有另一种实现同样的方法吗?
非常感谢您提供的任何帮助.
虽然Contains似乎没有正常工作,使用Any的确如下:
var results = from r in registrations
where (
from p in persons
where p.ExplicitManagers.Any(m => m.Manager == manager)
select p
).Any(p=>p == r.Registrant)
select r;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5037 次 |
| 最近记录: |