2012-04-15 25 views
4

得到的是有沒有辦法從那個可以被傳遞到的SelectList函數成員名單()?的NHibernate的QueryOver .SelectList(X)的功能

所以不是這樣

var dtos = repository.QueryOver<MicrofilmExportProcessed>() 
        .SelectList(list => list 
         .Select(x => x.Member1).WithAlias(() => dto.Member1) 
         .Select(x => x.Member2).WithAlias(() => dto.Member2) 
         .Select(x => x.Member3).WithAlias(() => dto.Member3)) 
        .List<MicrofilmExportProcessed>(); 

做這樣的事情:

var dtos = repository.QueryOver<MicrofilmExportProcessed>() 
        .SelectList(getMembersFromFunc()) 
        .List<MicrofilmExportProcessed>(); 

我嘗試創建方法,返回同一類型選擇列表的輸入參數,但它仍然告訴我輸入類型無效。不知道我錯過了什麼。

回答

8

喜歡的東西

Func<QueryOverProjectionBuilder<InvoiceDto>, QueryOverProjectionBuilder<InvoiceDto>> GetList() 
{ 
    InvoiceDto dto = null; 
    return list => list.Select(w => w.Client).WithAlias(() => dto.Client); 
} 

,並調用它像

return Session.QueryOver<InvoiceDto>() 
    .SelectList(GetList()) 
    .TransformUsing(Transformers.AliasToBean<InvoiceDto>()) 
    .List<InvoiceDto>();