获取{“不支持指定的方法。”}对列表执行查询时的异常应该在另一个列表中查找elemts

时间:2011-06-26 09:43:09

标签: nhibernate c#-4.0 fluent-nhibernate expression

我知道这听起来有点愚蠢而且含糊不清但我需要它: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 ,它的消息是: {“不支持指定的方法。”}

任何想法?

1 个答案:

答案 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查询。