3

可能であれば、単一のデータベースクエリで次のことを実行しようとしています。

public class Location
{
    public string URL {get;set;}
    public IList<Page> Pages {get;set;}
}

Page firstPage = Session.Linq<Location>()
                .Where(location => location.URL == "some-location-url")
                .Select(location => location.Pages).FirstOrDefault();

私の目的は、現在の場所の URL に基づいており、そのページ コレクションから最初の Page オブジェクトを返します。

私は今、さまざまな方法を試しましたが、それらはすべて、目的の Page オブジェクトを取得するために多くのクエリを実行しているようです。

どんな助けでも大歓迎です!

デイブ・ザ・ニンジャ

4

3 に答える 3

0

これはあなたが探しているものかもしれません:

Page firstPage = Session.Linq<Page>()
.OrderBy(page => page.Index)
.FirstOrDefault(page=> page.Location.URL == "some-location-url");

ページには、それが属する Location に関連する Location プロパティがあり、.Index が注文するプロパティになると仮定しています。

于 2009-02-12T14:22:31.917 に答える
0

Pageに対してではなくに対してクエリを実行します。レコードLocationを返す必要はまったくありません。Location

(from p in AllPages
where p.Location.URL == "some-location-url"
select p).FirstOrDefault();

[ほとんどの場合、LINQ クエリの作成に行き詰まったときは、関連する親子関係の一番下のオブジェクトからクエリの構築を開始すると役立つことがわかります。]

于 2009-02-12T14:23:19.933 に答える
0

コレクションのマッピングに order by を直接追加できませんでしたか。その後、次のことができます

Page firstPage = Session.Linq<Location>()
              .Where(location => location.URL == "some-location-url")
              .Select(location => location.Pages.FirstOrDefault()).FirstOrDefault();

FirstOrDefault は、NHibernate がすべての選択を行うのを停止する場合があります。

テストするためにlinq to nhibernateをセットアップしていないため、これに関する保証はありません。

于 2009-02-12T15:17:46.480 に答える