2

我有這些實體:LINQ到NHibernate的:不能使用LINQ的跳過()和Take()的支持fetchmany

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; } 
} 

我想通過自己的Keyword S和評論加載中BlogPost個分頁列表-計數。所以,我試試這個:

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(); 

你有什麼想法,請採取行數包括Keyword s?感謝您的任何建議。我想使用NHibernate 3.2 mapping by code

回答

1

問題是,nhibernate linq提供程序尚未完全實現。

您可以移動跳躍/接電話是後ToList(),但是你要上設置,而不是專爲匹配範圍記錄查詢整個結果進行過濾。

另外,您可以使用對採取適當的支持QueryOver <> API和跳過按照這樣的回答:https://stackoverflow.com/a/5073510/493

+0

支持謝謝。那麼如何通過QueryOver加載多對多關聯? Fetch方法只支持一對多和一對一的關聯!你能幫忙加載'post.Keywords'和'post.Comments.Count'嗎? – 2012-03-12 15:26:06