Исключение Antlr с сообщением «plan b» при обходе IQueryable сущностей NHibernate

У меня довольно странное исключение при попытке материализовать форму IQueryableI got NHibernate.Linq. Исключение типа Antlr.Runtime.Tree.RewriteEmptyStreamExceptionпросто указывает plan bи ничего более. Подробное исключение можно найти по ссылке http://pastebin.com/kR2dvDHd

. Вот код, который генерирует исключение:

var matterExtractor = new MatterExtractor();
var InactiveMatters = matterExtractor.GetMattersAtStatus(General.InactiveMatterStatus);
Assert.IsNotNull(InactiveMatters); //OK
Assert.IsInstanceOfType(InactiveMatters, typeof (IQueryable)); // OK
var MaterializedMatters = InactiveMatters.ToList(); //Exception is thrown

Класс Matter Extractor очень прост:

public class MatterExtractor
{
    public virtual IQueryable GetMattersAtStatus(MatterStatus status)
    {
        return
            (new NHibernateRepository.Repository()).Where(
                m => m.MatterStatusHistories.OrderByDescending(msh => msh.CreateTime).FirstOrDefault().MatterStatus == status);
    }
}

NHibernateRepository.Repository— это служебный класс, который реализует IQueryable с помощью NHibernate.LINQметодов расширения для NHibernate.Session. Здесь ничего конкретного, но на всякий случай вот список:http://pastebin.com/MgDxDg3Y

Я не думаю, что это связано с сопоставлениями NHibernate, поскольку другие тесты, взаимодействующие с сущностью Matter, работают нормально. Скорее всего, это связано с пунктом Where, но я не могу понять, что не так с этим пунктом. Я пробовал заменить

OrderByDescending(msh => msh.CreateTime).FirstOrDefault()

к

OrderBy(msh => msh.CreateTime).LastOrDefault()

но он мне только что сказал The LastResultOperator result operator is not current supported, так что я думаю NHibernate.Linqпросто не могу оставаться LastOrDefault.

Любые идеи, что означает plan bи как я могу обойти это?

11
задан David_001 12 August 2014 в 10:48
поделиться