gpt4 book ai didi

c# - 遍历 NHibernate 实体的 IQueryable 时出现消息 "plan b"的 Antlr 异常

转载 作者:可可西里 更新时间:2023-11-01 08:49:50 24 4
gpt4 key购买 nike

我在尝试实现 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 类很简单,如下所示:

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 的扩展方法.这里没有什么特别的,但为了以防万一,这是 list :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这意味着我该如何解决?

最佳答案

你确定OrderByDescending(msh => msh.CreateTime).FirstOrDefault()

没有为您存储库中的任何元素返回 null 吗?在我看来,那段代码是有问题的。

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

可能会解决您的问题。

另一种可能性是您没有指示 NHibernate 如何/何时具体化实体定义中的状态历史记录。我对 NHibernate 的经验是,像您尝试的某些查询可能更适合作为存储库函数(存储过程)

关于c# - 遍历 NHibernate 实体的 IQueryable 时出现消息 "plan b"的 Antlr 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11509283/

24 4 0