Исключение получения {"Указанный метод не поддерживается."} ​​При выполнении запроса к списку, элементы которого следует искать в другом списке. - PullRequest
1 голос
/ 26 июня 2011

Я знаю, это звучит глупо в некоторой степени и расплывчато, но мне это нужно: 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 свойства в первом списке.

Я немного упростил исходный запрос, чтобы сделать его более понятным .....

в любом случае, я получаю System.NotSupportedException от NHibernate, и его сообщение: {"Указанный метод не поддерживается."} ​​

есть идеи?

1 Ответ

2 голосов
/ 27 июня 2011

Вы не можете использовать internalReferences.Any() в запросах NHibernate, потому что он не может знать, как перевести это в 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)));

Это должно привести к запросу SQL, который использует IN (:p0, :p1, :p2).

...