2012-01-03 86 views
0

我有以下關係優化NHibernate的查詢

class Author 
    { 
     int Id; 
    } 

    class Publisher 
    { 
     int Id; 
    } 

    class Book 
    { 
     Publisher Publisher; 
     Author Author; 
     DateTime PublishDate; 
    } 

我想優化以下查詢:

foreach (Publisher) 
    { 
     foreach (Author) 
     { 
      session.Query<Book>() 
      .Where(x=> x.Author.Id == Author.Id && x.Publisher.Id ==Publisher.Id) 
      .OrderByDescending(x=> x.PublishDate) 
      .Take(5); 
     } 
    } 

我意識到,性能明智的這段代碼是可怕的,怎麼樣我可以改進它並在更少的查詢中獲得相同的結果嗎?

非常感謝!

回答

0

有很多方法,我們可以do.It對你的使用情況是依靠哪個對象獲得第一

這裏我提到的一種方式

DetachedCriteria forBook=DetachedCriteria.For<Book>(); 
forBook.CreateCriteria("Publisher"); 
forBook.CreateCriteria("Author"); 
ICriteria executableCriteria=forBook.GetExecutableCriteria(session); 
executableCriteria.SetFirstResult(0).SetMaxResult(5); 
executableCriteria.AddOrder(Order.Desc("PublishDate")); 
executableCriteria.List<Book>();