2011-08-10 84 views
1

DomainModel 我有這樣的對象圖。我想建立動態獲取Linq中表達NHibernate的讓我得到了一個SQL調用的所有對象圖,創建動態提取表達式

我想,我可以寫取這樣,這將做的工作,

IQueryable<Customer> lists = customerPersister.Query() 
     .Where(item => item.Id == id) 
     .FetchMany(item => item.LineOfBusiness) 
     .FetchMany(i2 => i2.Address) 
     .FetchMany(i3 => i3.Orders) 
     .ThenFetchMany(i4=>i4.OrderItems) ; 

但我並不總是需要所有這些對象圖。有時我需要CustomerAddress,有時需要CustomerLinesOfBusiness或有時需要CustomerOrders

無論如何,我可以動態構建這個獲取表達式嗎?

回答

0

你應該能夠簡單地擴展查詢需要:

IQueryable<Customer> lists = customerPersister.Query().Where(item => item.Id == id); 
if (needLinesOfBusiness) 
    lists = lists.FetchMany(item => item.LineOfBusiness); 
if (needAddress) 
    lists = lists.FetchMany(item => item.Address); 
if (needOrders || needOrderItems) 
{ 
    if (!needOrderItems) 
     lists = lists.FetchMany(item => item.Orders); 
    else 
     lists = lists.FetchMany(item => item.Orders).ThenFetchMany(order => order.Items); 
} 

唯一的問題是,ThenFetchMany不上IQueryable<Customer>工作,所以你需要包括訂單和一個訂單項走。