我知道这听起来有点愚蠢而且含糊不清但我需要它:D
我想对NH3.1执行查询:
var internalReferences = Repository<InternalReferenceRule>
.FindAll(e => e.PropertyType.EntityType.Id == 1)
var properties = Repository<IProperty>
.Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.ToList().Any(i => i.Id == r.Id)));
第一个列表( internalReferences )将在第二个想要检查的查询中使用 如果属性的RuleObjects在第一个列表中可用。
我有点简化原始查询,使其更容易理解.....
无论如何,我从NHibernate得到 System.NotSupportedException ,它的消息是: {“不支持指定的方法。”}
任何想法?
答案 0 :(得分:2)
您无法在NHibernate查询中使用internalReferences.Any()
,因为它无法知道如何将其转换为SQL。请尝试以下
var internalReferences = Repository<InternalReferenceRule>
.FindAll(e => e.PropertyType.EntityType.Id == 1).Select(x => x.Id).ToList();
var properties = Repository<IProperty>
.Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.Contains(r.Id)));
这应该会导致使用IN (:p0, :p1, :p2)
的SQL查询。