2

私はこれらのエンティティを持っています:

public class BlogPost {
    public virtual int Id { get; set; }
    public virtual IList<Keyword> Keywords { get; set; }
    public virtual IList<BlogComment> Comments { get; set; }
}

public class BlogComment {
    public virtual int Id { get; set; }
    public virtual BlogPost Post { get; set; }
}

public class Keyword {
    public virtual int Id { get; set; }
    public virtual IList<BlogPost> BlogPosts { get; set; }
}

とコメント数でBlogPostのページリストをロードしたい。Keywordだから私はこれを試します:

var entities = session.Query<BlogPost>()
    .Where(t => t.Published)
    .FetchMany(t => t.Keywords)
    .OrderByDescending(t => t.UpdatedAt)
    .Skip((pageNumber - 1) * pageSize).Take(pageSize)
    .Select(t => new {
        CommentsCount = t.Comments.Count(),
        Post = t
    })
    .ToList();

しかし、次のエラーが発生します。

指定された方法はサポートされていません。

そして、私が削除すると、.Skip((pageNumber - 1) * pageSize).Take(pageSize)それは機能します!例えば

var entities = session.Query<BlogPost>()
    .Where(t => t.Published)
    .FetchMany(t => t.Keywords)
    .OrderByDescending(t => t.UpdatedAt)
    // remove the below line
    //.Skip((pageNumber - 1) * pageSize).Take(pageSize)
    .Select(t => new {
        CommentsCount = t.Comments.Count(),
        Post = t
    })
    .ToList();

sを含めて行数を取得するアイデアはありますKeywordか? 提案をありがとう。


を使用してNHibernate 3.2 mapping by codeいます。

4

2 に答える 2

1

これは 3.3.3.GA でサポートされるようになりました。

http://sourceforge.net/p/nhibernate/news/2013/03/nhiberate-333ga-released/

于 2014-01-02T23:39:27.663 に答える
1

問題は、nhibernate linq プロバイダーがまだ完全に実装されていないことです。

スキップ/テイク呼び出しをToList() のに移動することもできますが、その範囲に一致するレコードを具体的にクエリするのではなく、結果セット全体をフィルタリングすることになります。

または、次の回答に従って、Take と Skip を適切にサポートする QueryOver<> API を使用することもできます: https://stackoverflow.com/a/5073510/493

于 2012-03-12T14:14:21.620 に答える