gpt4 book ai didi

一对多关系的NHibernate聚合查询

转载 作者:行者123 更新时间:2023-12-04 05:48:23 24 4
gpt4 key购买 nike

我有下一个实体:

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
}

我需要从数据库加载下一个信息 - 所有主题(ID,实际上是名称,但在这个演示案例中无关紧要)和另外两个字段 CountOfVotedUp、CountOfVotedDown(聚合) .因此,据我了解,在 SQL 世界中,我们需要连接、分组依据、案例和计数。

是否有可能使用 LINQ 以较少的 db 操作获取此信息?我的意思是 N+1、额外的选择、连接等。

我尝试的所有方法都是使用 NH 的 LINQ,但它的查询聚合仅在 Topic.Id 上进行,我无法计算任何 Votes 集合。

最佳答案

如果您有一个摘要类来存储您的结果:

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>();

我想这不正是您要寻找的,但希望这能让您走上正轨。

关于一对多关系的NHibernate聚合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10399448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com