NHibernate Queryover - 如何仅返回子集合

时间:2011-10-07 13:36:25

标签: nhibernate queryover

我遇到了以下nhibernate查询转移查询的困难。我可能过于复杂了,但问题出在这里:

  • 我有一个名为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

1 个答案:

答案 0 :(得分: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>();