我有下一个实体:
class Topic
{
public virtual int Id {get; private set;}
public virtual ICollection<Vote> Votes {get; private set; }
}
class Vote
{
public virtual Topic Topic {get; private set;}
public virtual VoteType VotedTo {get; private set;} // enum VotedUp, VotedDown
}
我需要从数据库加载下一个信息-所有主题(IDS,实际上名称,但在这种情况下,演示它并不重要)和两个字段CountOfVotedUp,CountOfVotedDown(聚集)。 因此,正如我在SQL世界了解我们需要加入,GROUP BY情况和计数。
难道是更多钞票来获得与LINQ这个信息与数据库操作较少? 我的意思是N + 1,附加的选择,连接等
所有这一切我想 - 就是用NH的LINQ,但它的查询只聚集在Topic.Id,我不能指望任何投票收藏。
只要你有一个总结类来存储你的结果:
public class SummaryDTO
{
public int TopicId { get; set; }
public VoteType TypeOfVote { get; set; }
public int VoteCount { get; set; }
}
然后
Vote voteAlias = null;
SummaryDTO result = null;
youNHSession.QueryOver<Topic>()
.JoinAlias(x=> x.Votes, ()=>voteAlias)
.SelectList(
list=>list
.SelectGroup(topic=>topic.Id).WithAlias(()=>result.TopicId)
.SelectGroup(()=>voteAlias.VotedTo).WithAlias(()=>result.TypeOfVote)
.SelectCount(()=>voteAlias.VotedTo).WithAlias(()=>result.VoteCount ))
.TransformUsing(Transformers.AliasToBean<SummaryDTO>())
.List<SummaryDTO>();
我想这是不是你正在寻找什么,但希望这将花费你一个良好的轨道。