我有一个使用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
。
为什么?
答案 0 :(得分:12)
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()
相同; - )