Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当前不支持LastResultOperator结果运算符_C#_Linq_Nhibernate_Linq To Nhibernate - Fatal编程技术网

C# 当前不支持LastResultOperator结果运算符

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)

我有一个使用linq到NHibernate的查询,用于
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;
}

工作起来很有魅力。