У меня довольно странное исключение, когда я пытаюсь материализовать IQueryable
, я получил форму 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<Matter>)); // OK
var MaterializedMatters = InactiveMatters.ToList(); //Exception is thrown
Класс Matter Extractor так же прост, как follwing:
public class MatterExtractor
{
public virtual IQueryable<Matter> GetMattersAtStatus(MatterStatus status)
{
return
(new NHibernateRepository.Repository<Matter>()).Where(
m => m.MatterStatusHistories.OrderByDescending(msh => msh.CreateTime).FirstOrDefault().MatterStatus == status);
}
}
NHibernateRepository.Repository<T>
- это класс утилиты, который реализует 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
, и как это можно обойти?