У меня довольно странное исключение при попытке материализовать форму IQueryable
I 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
и как я могу обойти это?