尝试实现IQueryableI got form时,我遇到了非常奇怪的异常NHibernate.Linq。type 的例外Antlr.Runtime.Tree.RewriteEmptyStreamException只是 states 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
物质提取器类很简单,如下所示:
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>是一个实用程序类,它通过NHibernate.LINQ扩展方法实现 IQueryable 到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意思,我该如何解决?