Проблема с пропустить и взять в NHibernate 3 Linq запрос - PullRequest
0 голосов
/ 02 января 2011

Использование linq для NHibernate (NHibernate v3) У меня следующий запрос LINQ:

    var session = this.GetSession();
    var rgn = this.Get(regionId);

    var query = from t in session.Query<Tag>()
                where
                    !(
                        from trn in session.Query<Translation>() 
                        where trn.Region.Id == regionId 
                        select trn.Tag.Id
                     )
                     .Contains(t.Id)

                select new Translation() {Id = t.Id, Tag = t, Region = rgn, TagTranslation=""};

    var count = query.Count();
    var untranslatedTags = query.Skip((page - 1)*pageSize).Take(pageSize);
    var countAfterSkipAndTake = untranslatedTags.Count();
    return untranslatedTags.ToList();
} 

переменная count действительно возвращает ожидаемое значениеОднако countAfterSkipAndTake возвращает то же значение.Я бы ожидал, что он вернет pageSize (который в данном случае равен 15).Последняя строка untranslatedTags.ToList () возвращает исключение.Я считаю, что LINQ для NHibernate реализован не полностью, прежде чем я попытаюсь загрузить транк, кто-нибудь увидит что-то очевидное, что я сделал неправильно.

1 Ответ

1 голос
/ 03 января 2011

Я предполагаю, что, поскольку в прошлом у меня была похожая проблема, var count = query.Count(); заставляет nHibernate скомпилировать запрос, и поэтому любые будущие изменения к нему бесполезны, поскольку он уже был выполнен.*

Чтобы проверить это, удалите эту строку и посмотрите, равен ли countAfterSkipAndTake 15.

...