C# 当前不支持LastResultOperator结果运算符
我有一个使用linq到NHibernate的查询,用于C# 当前不支持LastResultOperator结果运算符,c#,linq,nhibernate,linq-to-nhibernate,C#,Linq,Nhibernate,Linq To Nhibernate,我有一个使用linq到NHibernate的查询,用于EnterAndExitArchive实体。此实体与存档实体有关联 public EnterAndExitArchive GetLastEnterAndExitArchive(long archiveId) { var q = SessionInstance.Query<EnterAndExitArchive>() .Where(x => x.Archive.Id == archiveId)
EnterAndExitArchive
实体。此实体与存档
实体有关联
public EnterAndExitArchive GetLastEnterAndExitArchive(long archiveId)
{
var q = SessionInstance.Query<EnterAndExitArchive>()
.Where(x => x.Archive.Id == archiveId)
.LastOrDefault<EnterAndExitArchive>();
return q;
}
公共EnterAndExit存档GetLastEnterAndExit存档(长存档)
{
var q=SessionInstance.Query()
.Where(x=>x.Archive.Id==archiveId)
.LastOrDefault();
返回q;
}
或
公共EnterAndExit存档GetLastEnterAndExit存档(长存档)
{
var q=SessionInstance.Query()
.LastOrDefault(x=>x.Archive.Id==archiveId);
返回q;
}
但这有一个运行时错误。异常消息为当前不支持LastResultOperator结果运算符
为什么?看来nhibernate Linq提供程序没有实现
LastOrDefault()
——因此它不受支持。您可以通过以下方法解决此问题:首先建立一个以相反顺序返回所需项目的订单,然后使用FirstOrDefault()
:
var q = SessionInstance.Query<EnterAndExitArchive>()
.OrderByDescending(x=> x.SomeOrderField)
.FirstOrDefault<EnterAndExitArchive>(x => x.Archive.Id == archiveId);
public EnterAndExitArchive GetLastEnterAndExitArchive(long archiveId)
{
var q = SessionInstance.Query<EnterAndExitArchive>()
.Where(x => x.Archive.Id == archiveId)
.OrderByDescending(x => x.Something)
.FirstOrDefault();
return q;
}
var q=SessionInstance.Query()
.OrderByDescending(x=>x.SomeOrderField)
.FirstOrDefault(x=>x.Archive.Id==archiveId);
此外,我还看到您目前根本没有对查询中的结果进行排序—您希望结果的顺序是什么?如果顺序未定义,LastOrDefault()
与FirstOrDefault()
相同;-) LastOrDefault()
位于NHibernate中
也许您可以对结果进行排序,并使用FirstOrDefault()
:
var q = SessionInstance.Query<EnterAndExitArchive>()
.OrderByDescending(x=> x.SomeOrderField)
.FirstOrDefault<EnterAndExitArchive>(x => x.Archive.Id == archiveId);
public EnterAndExitArchive GetLastEnterAndExitArchive(long archiveId)
{
var q = SessionInstance.Query<EnterAndExitArchive>()
.Where(x => x.Archive.Id == archiveId)
.OrderByDescending(x => x.Something)
.FirstOrDefault();
return q;
}
公共EnterAndExit存档GetLastEnterAndExit存档(长存档)
{
var q=SessionInstance.Query()
.Where(x=>x.Archive.Id==archiveId)
.OrderByDescending(x=>x.Something)
.FirstOrDefault();
返回q;
}
工作起来很有魅力。