0

このようにコレクションから最初の要素を取得しようとしています

List<Entity> data = session.Query<Entity>()
                       .Fetch(x => x.Photos.First())
                       .ToList();

このエラーが発生しています。 フェッチ要求は、単純なメンバー アクセス式である必要があります。'[100002]' は代わりに SubQueryExpression です。パラメータ名: relatedObjectSelector.

今私は .Fetch(x => x.Photos.First()) を使用していますが、最初の要素が常に入力されることがわかっているためです。読み込み時間を短縮するためにコレクションの最初の要素だけが必要なので、これは私が必要とする正確な解決策ですが、このエラーが発生しています。

4

2 に答える 2

2

Fetch はコレクション全体をフェッチします。「fetch」を使用して最初の要素をフェッチするように指示することはできませんが、射影などを使用して目的の効果を得ることができます。

        var subQ = QueryOver.Of<Entity>()
            .SelectList(x => x.SelectMin(y => y.Photos)); // sub query selecting min photo id from entity

        List<Photo> data = session.QueryOver<Photo>()                
                               .Fetch(x => x.Entity).Eager // eager load the entity
                               .WithSubquery.WhereProperty(x => x.Id).In(subQ) // restrict the photo to those that are the first ones for the entity
                               .List() // execute query from database
                               .ToList(); // convert to List

IList ではなく List が必要な理由はわかりませんが、一般的には、インターフェイスを使用することをお勧めします。

于 2012-05-28T14:11:36.117 に答える
-1
List<Entity> data = session.Query<Entity>()
      .Fetch(x=>x.Photos.FirstOrDefualt())//here You need get only first element          
      .ToList();
于 2012-05-28T12:06:24.990 に答える