Nhibernate 表达式类型';NHSUM表达式';此SelectClauseVisitor不支持

Nhibernate 表达式类型';NHSUM表达式';此SelectClauseVisitor不支持,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,我有一个查询可以在LinqPad中运行,但不能在NHibernate LINQ中运行。我在NHibernate Jira上发现了一个类似的bug,但我认为这可能是另一个bug,我正在寻找可能的替代方案 使用默认LINQ to SQL在LinqPad中工作的查询如下所示: from ticket in LotteryTickets group tiket by ticket.ticketType into g select new { TicketType = g.Key,

我有一个查询可以在LinqPad中运行,但不能在NHibernate LINQ中运行。我在NHibernate Jira上发现了一个类似的bug,但我认为这可能是另一个bug,我正在寻找可能的替代方案

使用默认LINQ to SQL在LinqPad中工作的查询如下所示:

from ticket in LotteryTickets
  group tiket by ticket.ticketType into g

 select new
 {
     TicketType = g.Key,
     TotalWinningTickets = g.Count(b => b.WinAmount != 0),
     TotalWon = g.Sum(b => b.WinAmount * b.ticketWeight),
     TotalTickets = g.Count(),
 }
from ticket in session.Query<Ticket>()
group ticket by ticket.TicketType into g
select new ReportRow
{
    TicketType = g.Key,
    TotalWinningBets = g.Sum(t => t.HasWon),
    TotalTickets = g.Count(),
    TotalWon = g.Sum(t => t.WinAmount * t.WagerWeight)
};
还有各种其他方法来计算TotalWinningTickets,例如
TotalWinningTickets=g.Sum(t=>t.WinAmount>0?1:0)
g.Sum(t=>t.WinAmount==0?0:1)

现在,有了NHibernate LINQ,如果不更改我的底层db表,我就无法让它正常工作。我的选择是添加一个名为HasWon的表列,我将其设置为0表示false,1表示true。这确实有效,但我觉得除了修改db表之外还有更好的方法。可能是使用计算字段的子选择。我的NHibernate LINQ最终看起来像这样:

from ticket in LotteryTickets
  group tiket by ticket.ticketType into g

 select new
 {
     TicketType = g.Key,
     TotalWinningTickets = g.Count(b => b.WinAmount != 0),
     TotalWon = g.Sum(b => b.WinAmount * b.ticketWeight),
     TotalTickets = g.Count(),
 }
from ticket in session.Query<Ticket>()
group ticket by ticket.TicketType into g
select new ReportRow
{
    TicketType = g.Key,
    TotalWinningBets = g.Sum(t => t.HasWon),
    TotalTickets = g.Count(),
    TotalWon = g.Sum(t => t.WinAmount * t.WagerWeight)
};
会话中来自票据的
。查询()
按票证分组票证。票证键入g
选择新建报告行
{
TicketType=g.键,
TotalWinningBets=g.Sum(t=>t.haswen),
TotalTickets=g.Count(),
TotalWon=g.Sum(t=>t.WinAmount*t.WagerWeight)
};
我实际上是在NHibernate查询中尝试进行多次选择计数,但基于不同的条件。最奇怪的是,NHibernate在生成的SQL中将我所有的
Count(t=>t.?)
错误地转换为
Count(*)

LinqPad生成的SQL的工作方式如下: 选择总和( (案例 当[t1].[WinAmount]>@p3时,则@p4 ELSE@p5 结束)作为[值]


希望有更好的方法。

我已经四处寻找了很多,但还没有找到解决方法。你有什么消息吗?