2011-10-07 91 views
1

我遇到以下nhibernate查詢轉換困難。我大概是過於複雜的事情,但現在的問題是:NHibernate Queryover - 如何僅返回子集合

  • 我有一個名爲AuctionStatistic鏈接到拍賣(這是單向的,我沒有從拍賣回統計數據的鏈接)
  • 實體
  • 我想查詢統計表,找到所有的拍賣ID,並只拉回那些符合一定的門檻 - 即前500名拍賣視圖
  • 一旦我得到了頂部的X(在這個例子中,我是硬編碼爲10000個視圖)我想撤回拍賣ID和名稱。對於這個特定的查詢我不需要任何存儲在統計數據表中的數據(儘管這是其他地方使用,而不是冗餘)

我想我可以使用類似以下找回剛剛拍賣,但因爲我在查詢其AuctionStatistic預計選擇的值是類型AuctionStatistic(或其列表)

var auctions = _session.QueryOver<AuctionStatistic>().Where(c => c.ViewCount > 10000).Fetch(x=>x.Auction).Eager.Select(x=>x.Auction); 

任何人都可以提出這樣做​​的更好的辦法?

感謝

JP

+0

你能使它雙向嗎?我想如果你選擇這樣的對象,它只會拉取拍賣的ID。如果你只需要id和名字,我會把它投影到dto中。 – dotjoe

回答

1

沒有雙向這可能是你最好的選擇。

Auction auctionAlias = null; 
AuctionDTO dto = null; 

var auctionDtos = _session.QueryOver<AuctionStatistic>() 
    .Where(c => c.ViewCount > 10000) 
    .JoinAlias(x => x.Auction,() => auctionAlias) 
    .SelectList(list => list 
     .Select(() => auctionAlias.id).WithAlias(() => dto.id) 
     .Select(() => auctionAlias.name).WithAlias(() => dto.name)) 
    .TransformUsing(Transformers.AliasToBean<AuctionDTO>()) 
    .List<AuctionDTO>();