您能告诉我如何将以下SQL代码转换为Linq To SQL或Linq To Entites吗?
正确的SQL代码是:
选择CollectId,url,userid,pubtime 来自Collect group by url,collectid,userid,pubtime pubtime> =(从中选择max(pubtime) 收集d d.url = collect.url) 按Collect.pubtime desc命令
数据库表脚本是:
如果存在(从sysobjects中选择*) 其中id = OBJECT_ID('[Collect]')和 OBJECTPROPERTY(id,'IsUserTable')= 1) DROP TABLE [收集]
创建表[收集]([CollectId] [int] IDENTITY(1,1)NOT NULL, [url] [nvarchar](200)NULL,[UserId] [nvarchar](50)NULL,[PubTime] [datetime] NULL)
带有NOCHECK ADD的ALTER TABLE [Collect] CONSTRAINT [PK_Collect] PRIMARY KEY NONCLUSTERED([CollectId])SET IDENTITY_INSERT [收集] ON
INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 1, 'www.sohu.com', '迈克','2008-10-10 0:00:00')INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 2, 'www.echina365.com', '百合','2008-10-15 0:00:00')INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 3, 'www.php.com', '汤姆','2008-10-20 0:00:00')INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 如图4所示, 'www.echina365.com', '姚明','2008-10-23 0:00:00')INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 5, 'www.echina365.com', '迈克','2008-10-25 0:00:00')INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 6, 'www.sohu.com', '杰克',“2008-10-26 0:00:00')INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 7, 'www.echina365.com', '崔西','2008-11-2 0:00:00')INSERT [收集] ([CollectId],[地址],[用户ID],[PubTime]) 价值观( 8, 'www.php.com', '姚明','2008-11-5 0' 点00分00秒)
SET IDENTITY_INSERT [收集]关闭
答案 0 :(得分:2)
由于您的“拥有”条件实际上不在聚合列上,您是否只能使用“where”子句?
select distinct CollectId, url, userid, pubtime
from Collect
where pubtime >= (select max(pubtime) from collect d where d.url = collect.url)
order by Collect.pubtime desc
根据您提供的数据集,这会得到相同的结果。 LINQ语句变得相当简单:
var rows = (from c in Collect
where c.PubTime >= (
from d in Collect
where d.Url == c.Url
select d.PubTime).Max()
orderby c.PubTime descending
select c).Distinct();
我可能会误解你的意图。也许我的查询版本并不能完全符合您的要求。如果是这样,请给我留言,我会删除答案,以免混淆问题。