首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用新的Linq-to-NHibernate提供程序/通过新的Linq-to-NHibernate提供程序计算Distinct -内连接- Group

使用新的Linq-to-NHibernate提供程序/通过新的Linq-to-NHibernate提供程序计算Distinct -内连接- Group
EN

Stack Overflow用户
提问于 2010-12-03 02:42:18
回答 1查看 2.1K关注 0票数 2

如何使用新的Linq到NHibernate提供程序(3.x)编写这个精确的SQL查询?

代码语言:javascript
复制
SELECT Post.Title, COUNT(DISTINCT Comment.UserId)
FROM Post
INNER JOIN Comment ON Post.Id = Comment.PostId
GROUP BY Post.Title

这里有一些SQL如果您想做一些测试,

代码语言:javascript
复制
DECLARE @Post Table(Id int identity(1,1), Title varchar(200))
DECLARE @Comment Table(Id int identity(1,1), PostId int, Comment varchar(200), UserId int)

DECLARE @PostId int

INSERT INTO @Post(Title)
VALUES ('Test')

SELECT @PostId = SCOPE_IDENTITY()

INSERT INTO @Comment(PostId, Comment, UserId)
VALUES (@PostId, 'Test Comment', 1)

INSERT INTO @Comment(PostId, Comment, UserId)
VALUES (@PostId, 'Test Comment 2', 1)

INSERT INTO @Comment(PostId, Comment, UserId)
VALUES (@PostId, 'Test Comment 3', 2)

INSERT INTO @Post(Title)
VALUES ('Test 2')

SELECT @PostId = SCOPE_IDENTITY()

INSERT INTO @Comment(PostId, Comment, UserId)
VALUES (@PostId, 'Test Comment', 1)

INSERT INTO @Comment(PostId, Comment, UserId)
VALUES (@PostId, 'Test Comment 2', 2)

INSERT INTO @Comment(PostId, Comment, UserId)
VALUES (@PostId, 'Test Comment 3', 3)


SELECT Post.Title, COUNT(DISTINCT Comment.UserId)
FROM @Post Post
INNER JOIN @Comment Comment ON Post.Id = Comment.PostId
GROUP BY Post.Title
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-03 12:06:11

我认为目前不可能完成count(distinct x)部分。

这是我最接近的:

代码语言:javascript
复制
from comment in session.Query<Comment>()
group comment by comment.Post.Title
      into g
      select new
             {
                 Title = g.Key,
                 Count = g.Select(x => x.UserId).Distinct().Count()
             };

但它产生的SQL与以下内容完全相同:

代码语言:javascript
复制
from comment in session.Query<Comment>()
group comment by comment.Post.Title
      into g
      select new
             {
                 Title = g.Key,
                 Count = g.Count()
             };

即:

代码语言:javascript
复制
SELECT Post.Title, COUNT(*)
FROM Comment
LEFT JOIN Post ON Post.Id = Comment.PostId
GROUP BY Post.Title

您应该向http://jira.nhforge.org发布一个问题。Linq提供者正在进行大量的工作,并且在不久的将来有很好的机会来支持这个构造。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4341994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档