【问题标题】:Group by with different select Nhibernate [duplicate]使用不同的选择 Nhibernate 分组 [重复]
【发布时间】:2016-04-25 13:22:10
【问题描述】:

我想在 Nhibernate QueryOver 中做这个 SQL 查询:

SELECT id FROM tb_example
GROUP BY id, name
ORDER BY name

我尝试了什么:

1) 我在SelectList 中添加了一个.Select,试图覆盖SelectGroup 的选择,但没有成功

var query = session.QueryOver<Person>()
                   .SelectList(list => list
                   .Select(p => p.Id)
                   .SelectGroup(p => p.Id)
                   .SelectGroup(p => p.Name));
query = query.OrderBy(p => p.Name).Asc;

使用query生成的SQL:

SELECT id, id, name FROM tb_example
GROUP BY id, name
ORDER BY name

2) 在另一个查询的结果中使用查询。像这样:

SELECT id 
FROM 
  (SELECT id, name FROM tb_example
  GROUP BY id, name
  ORDER BY name)

但我不知道如何从另一个查询创建结果查询。

var groupByQuery = session.QueryOver<Person>()
                       .SelectList(list => list
                       .SelectGroup(p => p.Id)
                       .SelectGroup(p => p.Name));
var query = session.QueryOver<?????>();

我该怎么做?谢谢!

【问题讨论】:

  • 关于#1,不幸的是,QueryOver 你必须 SELECT所有分组列。据我所知,#2 是完全不可能的。 QueryOver 只能从映射表中选择(而不是像您的示例所示的任意表表达式)。
  • 另见此问答,可能重复:stackoverflow.com/q/30913037/497356

标签: c# nhibernate queryover


【解决方案1】:

我知道的最简单的解决方案是:

var query = session
  .QueryOver<Person>()
  .SelectList(list => list
    .SelectGroup(p => p.Id)
    .SelectGroup(p => p.Name));
query = query.OrderBy(p => p.Name).Asc;
query.List().Select(x => (int)x[0]).ToList();

【讨论】:

  • 您好 Stefan,感谢您的回复。我无法执行查询然后使用 linq。使用此查询的结果,我将在 .In 中使用它。使用列表或数组,2100 个参数的限制会阻止我。这就是我寻找 NHibernate 解决方案的原因。
  • 前段时间我也遇到了同样的问题。不记得我是如何解决的。需要重新找到它。
【解决方案2】:

你能试试下面的例子吗

  var groupByQuery =   (from p
        in this.Session.Query<Person>()
        group p by new { Id= p.Id, Name= p.Name}
        into g
        select p).ToList();

【讨论】:

  • 您好,Soner,感谢您的回答。我在选择 p“无法从查询中推断出类型参数”中遇到编译器错误。而且我没有找到你只在p.Id中进行选择的地方,你能解释一下吗?
猜你喜欢
  • 2012-12-31
  • 2013-09-30
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多