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

标签 c# linq nhibernate fluent-nhibernate

我在尝试实现 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/

相关文章:

NHibernate 1 到 0 或 1 到 1

.net - Nhibernate vb.net mvc 无法编译映射

c# - 通过接口(interface)访问时,DbContext 在查询时抛出异常

vb.net - 无法将类型 'System.Int32' 的对象强制转换为类型 'System.String'

c# - Linq to SQL 多条件 where 子句

NHibernate:如何从 session 缓存中获取实体实例?

c# - 从 .NET 验证 dll 具有有效签名并且未被修改

c# - Windows Phone 7 的目录中可以存储的最大文件数?

c# - PC 和 USB 设备之间通信的最佳方式是什么

c# - LinQ 数据行和列集合 C#