当前不支持LastResultOperator结果运算符

本文关键字:结果 运算符 LastResultOperator 不支持 | 更新日期: 2023-09-27 18:20:42

我有一个使用linq到NHibernate的查询,用于EnterAndExitArchive实体。该实体具有Archive实体的关联。

public EnterAndExitArchive GetLastEnterAndExitArchive(long archiveId)
{
   var q = SessionInstance.Query<EnterAndExitArchive>()
          .Where(x => x.Archive.Id == archiveId)
          .LastOrDefault<EnterAndExitArchive>();
   return q;
}

public EnterAndExitArchive GetLastEnterAndExitArchive(long archiveId)
{
   var q = SessionInstance.Query<EnterAndExitArchive>()
          .LastOrDefault<EnterAndExitArchive>(x => x.Archive.Id == archiveId);
   return q;
}

但这有一个运行时错误。异常消息为The LastResultOperator result operator is not current supported

为什么?

当前不支持LastResultOperator结果运算符

LastOrDefault()在NHibernate中不受支持。

也许你可以订购结果并使用FirstOrDefault()代替:

public EnterAndExitArchive GetLastEnterAndExitArchive(long archiveId)
{
   var q = SessionInstance.Query<EnterAndExitArchive>()
          .Where(x => x.Archive.Id == archiveId)
          .OrderByDescending(x => x.Something)
          .FirstOrDefault();
   return q;
}

nhibernate Linq提供程序似乎没有实现LastOrDefault(),因此它不受支持。你可以通过首先建立一个订单来解决这个问题,该订单将以相反的顺序返回你想要的物品,然后使用FirstOrDefault()

var q = SessionInstance.Query<EnterAndExitArchive>()
          .OrderByDescending(x=> x.SomeOrderField)
          .FirstOrDefault<EnterAndExitArchive>(x => x.Archive.Id == archiveId);

此外,我看到您目前根本没有在查询中对结果进行排序——您希望结果的顺序是什么?如果顺序未定义,则LastOrDefault()FirstOrDefault()相同;-)