Поставщик NHibernate 3.0 Linq. Выберите «не работает» после «Пропустить» и «Вверх».

Привет, я использую NHiberante для заполнения выгружаемой и упорядоченной сетки моего веб-приложения. Все работало нормально, пока я не решил запустить проекцию.

Это оригинальный рабочий код:

var data = repository
    .Where(predicate);
    .OrderBy(columns)
    .Skip(amount)
    .Take(anotherAmount);

Затем я начал представлять свою проекцию, и она тоже отлично сработала:

var data = repository
        .Where(predicate);
        .OrderBy(columns)
        .Select(myProjection);

Я был рад, что все работает, поэтому я добавил недостающие Skip и Take, но остановился - теперь Nhibernate заявляет, что Select не поддерживается (NotSupportedException). Код:

var data = repository
        .Where(predicate);
        .OrderBy(columns)
        .Skip(amount)
        .Take(anotherAmount)
        .Select(projection);

Это баг или я что-то не так делаю?


person Nikodem Rafalski    schedule 04.01.2011    source источник
comment
Это известная ошибка. 216.121.112.228/browse/NH-2317   -  person Nikodem Rafalski    schedule 04.01.2011


Ответы (2)


На мой взгляд, это была ошибка в NH. В версии 3.3.1.4000 работает нормально.

person cryss    schedule 08.08.2012

Когда вы вызываете .Count(), вы выполняете запрос, запрос больше не существует. Вам нужно выполнить два отдельных запроса, чтобы получить количество и список.

Вы можете сделать что-то необычное с помощью Future‹> или MultiQuery.

Изменить: http://groups.google.com/group/nhusers/browse_thread/thread/16c296414aedc09d

Второй пост здесь должен указать вам правильное направление.

person Phill    schedule 04.01.2011
comment
Count() здесь не тот случай (ошибка останется, если я ее уберу), поэтому я уберу ее из примеров кода. - person Nikodem Rafalski; 04.01.2011
comment
А можно весь запрос показать, часть из репозитория тоже? - person Phill; 04.01.2011
comment
репозиторий - это просто LinqProvider - взят из ISession.Query‹Entity› - person Nikodem Rafalski; 04.01.2011
comment
На 99% уверен, что провайдер Linq не поддерживает прогнозы, вам нужно будет использовать QueryOver. - person Phill; 04.01.2011
comment
это так (я написал это - второй пример кода работает нормально), но спасибо за ваше время :) - person Nikodem Rafalski; 04.01.2011
comment
Я только что запустил проект и проверил Query, не получил никаких вариантов прогнозов на Select. Но в QueryOver у меня есть возможность проекций на Select... Не знаю, как вы заставили это работать :( Извините. - person Phill; 04.01.2011