LastResultOperator结果运算符不是当前支持的

时间:2012-01-19 14:10:41

标签: c# linq nhibernate linq-to-nhibernate

我有一个使用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

为什么?

2 个答案:

答案 0 :(得分:12)

NHibernate中的

LastOrDefault()not supported

也许您可以订购结果并改为使用FirstOrDefault()

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

   return q;
}

答案 1 :(得分:2)

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

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

此外,我发现您目前还没有在查询中订购结果 - 您希望结果的顺序是什么?如果订单未定义LastOrDefault()FirstOrDefault()相同; - )