Оператор результата LastResultOperator в настоящее время не поддерживается - PullRequest
4 голосов
/ 19 января 2012

У меня есть запрос, использующий 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 ]

12 голосов
/ 19 января 2012

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;
}
2 голосов
/ 19 января 2012

Кажется, провайдер nhibernate Linq не реализовал LastOrDefault() - в результате он не поддерживается. Вы можете обойти это, сначала установив заказ, который вернет нужные вам предметы в обратном порядке, а затем используя FirstOrDefault() вместо:

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

Также я вижу, что вы в данный момент не упорядочиваете свои результаты в своем запросе - в каком порядке вы ожидали, что результаты будут в? Если заказ не определен, LastOrDefault() совпадает с FirstOrDefault(); -)

...