无法使用Nhibernate的Linq检索Group By实体或复合键

时间:2011-01-04 12:23:09

标签: nhibernate group-by linq-to-nhibernate

我正在尝试使用NH3执行Linq查询。 知道下面的SQL困难,我知道这是不可能的,但理想情况下,我想通过一个实体来完成这个组,并将其整个检索到。 类似的东西:

var list = from proposals in Session.Query<Proposal>()
           group proposals by proposals.Job
           into jobGrouping
           select new {
               Job = jobGrouping.Key, 
               TotalProposals = jobGrouping.Count()
           };

这会生成非法的SQL查询,因为它尝试检索整个Job实体,但仅按其Id进行分组。

我尝试过复合字段分组:

 var list = from proposals in Session.Query<Proposal>()
                   group proposals by new { proposals.Job.Name, proposals.Job.Status}
                   into jobGrouping
                   select new {
                      Job = jobGrouping.Key.Name, 
                      Status = jobGrouping.Key.Status, 
                      TotalProposals = jobGrouping.Count()
                   };

但是每当我尝试这个时,我会在NHibernate尝试构建表达式树时得到一个异常:

  

已添加具有相同键的项目。

任何人都知道NHibernate是否有办法实现这一目标?

谢谢, 伊兰

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,尝试多次使用.Join扩展方法,其中表达式树别名直接来自lambda参数名称。

我对SQL Like linq语法的了解有限,但我认为它会以某种方式转换为自动分配lambda别名的流畅等效语法。

如果是这种情况,可能会将此翻译为具有显式唯一labmda别名的流畅语法,可以避免此问题