1

以下のクエリを実行すると、「No persister for: System.Collections.Generic.List」例外が発生する理由はありますか?

       var subs = new List<Subsection>();

        var subsections = Session.QueryOver<Subsection>()
                            .WhereRestrictionOn(s => s.Id)
                            .IsInG(subsectionIds)
                            .List<Subsection>();

        Location foreignExpertLocation = null;

        var result = Session.QueryOver<InternationalLawyerExpertise>()
            .JoinAlias(i => i.ForeignExpertLocation, () => foreignExpertLocation)
            .JoinAlias(() => foreignExpertLocation.Subsections, () => subs)
            .AndRestrictionOn(() => subs).IsInG(subsections)
            .Where(i => i.ForeignExpertLocation == location && i.Status.Id == _confirmed)
            .Fetch(lawyer => lawyer.PersonOrganisation.Person).Eager
            .Fetch(lawyer => lawyer.PersonOrganisation.Organisation).Eager
            .List<InternationalLawyerExpertise>();
        return result;
4

1 に答える 1

1

subsections 問題は、 「サブクエリ」の作成方法にある可能性が最も高いです。この回答を確認してみてください: https://stackoverflow.com/a/14080092/1679310

注: クラスのマッピングと定義が欠落しているため、スニペットに基づいた「ハウツー」としてこれを使用してください。切り離されたクエリを作成する必要があります。

var subQuery = QueryOver.Of<<Subsection>()
  .WhereRestrictionOn(s => s.Id)
    .IsInG(subsectionIds)
  .Select((s) => s.ID); // ID projection

そしてそれを使用します:

var result = Session.QueryOver<InternationalLawyerExpertise>()
   ...
   .Where(Subqueries.PropertyIn("SubsectionID", subQuery.DetachedCriteria))

そのため、内部選択を使用して 1 つの選択フィルターを直接使用できます (NHibernate は、サブ選択をメイン クエリに挿入します)。

...またはマッピングに関する詳細を提供します..

于 2013-01-18T16:34:25.780 に答える