0

次の SQL コードを Linq To SQL または Linq To Entites に変換する方法を教えてください。

正しい SQL コードは次のとおりです。

Collect から CollectId,url,userid,pubtime を選択 url,collectid,userid,pubtime で pubtime >= (collect d から max(pubtime) を選択、ここで d.url = collect.url ) Collect.pubtime desc で並べ替える

データベース テーブル スクリプトは次のとおりです。

存在する場合 (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] ON

INSERT [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]) 値 (7,'www.echina365.com','Tracy',' 2008-11-2 0:00:00') INSERT [Collect] ([CollectId],[Url],[UserId],[PubTime]) 値 (8,'www.php.com','YaoMing',' 2008-11-5 0:00:00')

SET IDENTITY_INSERT [収集] OFF

4

1 に答える 1

2

「having」条件は実際には集計列にないため、「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();

私はあなたの意図を誤解している可能性があります。おそらく、私のバージョンのクエリは、あなたが望むものとまったく同じではありません。その場合は、コメントを残してください。問題を混乱させないように、回答を削除します。

于 2008-11-26T05:21:08.657 に答える