2012-01-19 11 views
4

EnterAndExitArchiveエンティティの場合、NHibernateにlinqを使用するクエリがあります。このエンティティはArchiveエンティティによって関連付けられています。LastResultOperator結果演算子は現在サポートされていません

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です。

なぜですか?

答えて

11

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()を実装していないようです。その結果、サポートされていません。また

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

私はあなたが現在では、すべてのクエリで検索結果を注文されていない参照してください。あなたがしたい項目を逆順にして、代わりにFirstOrDefault()を使用して返されます順序を確立するすべての最初でこの問題を回避することができます - あなたはどのような順序で結果を期待しましたか?順序が定義されていない場合LastOrDefault()はNHibernateのでFirstOrDefault() ;-)

関連する問題