如何翻译 SQL 代码“having” 条件转换为 LinqToSQL 或 LinqToEntites?
您能告诉我如何将以下 SQL 代码转换为 Linq To SQL 或 Linq To Entites 吗?
正确的SQL代码是:
选择 CollectId、url、userid、pubtime 来自收集组依据 url,collectid,userid,pubtime 有 pubtime >=(从中选择 max(pubtime) 收集 d,其中 d.url =collect.url ) 按 Collect.pubtime desc 排序
数据库表脚本为:
如果存在(从 sysobjects 中选择 * 其中 id = OBJECT_ID('[收集]') 和 OBJECTPROPERTY(id, 'IsUserTable') = 1) 删除表[收集]
创建表 [收集] ( [CollectId] [int] IDENTITY (1, 1) NOT NULL, [网址] [nvarchar] (200) NULL,[用户 ID] [nvarchar] (50) NULL,[PubTime] [日期时间] NULL)
使用 NOCHECK ADD 更改表 [收集] 约束 [PK_Collect] 主键 非聚集 ([CollectId]) 集 IDENTITY_INSERT [收集] 开启
插入[收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 1,'搜狐网','Mike','2008-10-10 0:00:00') 插入 [收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 2、'www.echina365.com','莉莉','2008-10-15 0:00:00') 插入 [收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 3、'www.php.com','汤姆','2008-10-20 0:00:00') 插入 [收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 4、'www.echina365.com','姚明','2008-10-23 0:00:00') 插入 [收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 5、'www.echina365.com','Mike','2008-10-25 0:00:00') 插入 [收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 6、'搜狐网','杰克','2008-10-26 0:00:00') 插入 [收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 7、'www.echina365.com','Tracy','2008-11-2 0:00:00') 插入 [收集] ([收集 ID]、[网址]、[用户 ID]、[发布时间]) 值( 8、'www.php.com','姚明','2008-11-5 0:00:00')
设置 IDENTITY_INSERT [收集] 关闭
Could you tell me how to translate the following SQL code to Linq To SQL or Linq To Entites?
The correct SQL code is:
select CollectId,url,userid,pubtime
from Collect group by
url,collectid,userid,pubtime having
pubtime >= (select max(pubtime) from
collect d where d.url = collect.url )
order by Collect.pubtime desc
The database table script is:
if exists (select * from sysobjects
where id = OBJECT_ID('[Collect]') and
OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [Collect]CREATE TABLE [Collect] ( [CollectId]
[int] IDENTITY (1, 1) NOT NULL,
[Url] [nvarchar] (200) NULL, [UserId]
[nvarchar] (50) NULL, [PubTime]
[datetime] NULL)ALTER TABLE [Collect] WITH NOCHECK ADD
CONSTRAINT [PK_Collect] PRIMARY KEY
NONCLUSTERED ( [CollectId] ) SET
IDENTITY_INSERT [Collect] ONINSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
1,'www.sohu.com','Mike','2008-10-10
0:00:00') INSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
2,'www.echina365.com','Lily','2008-10-15
0:00:00') INSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
3,'www.php.com','Tom','2008-10-20
0:00:00') INSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
4,'www.echina365.com','YaoMing','2008-10-23
0:00:00') INSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
5,'www.echina365.com','Mike','2008-10-25
0:00:00') INSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
6,'www.sohu.com','Jack','2008-10-26
0:00:00') INSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
7,'www.echina365.com','Tracy','2008-11-2
0:00:00') INSERT [Collect]
([CollectId],[Url],[UserId],[PubTime])
VALUES (
8,'www.php.com','YaoMing','2008-11-5
0:00:00')SET IDENTITY_INSERT [Collect] OFF
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于您的“having”条件实际上不在聚合列上,因此您不能只使用“where”子句吗?
考虑到您提供的数据集,这会得到相同的结果。 然后 LINQ 语句变得相当简单:
不过我可能会误解您的意图。 也许我的查询版本并不完全符合您的要求。 如果是这样,请给我留言,我将删除答案,以免混淆问题。
Since your "having" condition isn't actually on an aggregated column, couldn't you just use the "where" clause?
This gets the same result given the dataset you've supplied. The LINQ statement then becomes reasonably simple:
I could be misinterpreting your intent though. Perhaps my version of the query doesn't do exactly what you want. If so, leave me a comment and I'll delete the answer so as not to confuse the issue.