当前不支持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
。
为什么?
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()
相同;-)