SQL 코드를 "wast"조건을 LinqToSQL 또는 LinqtoEntites로 변환하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/319800

문제

다음 SQL 코드를 LINQ로 SQL로, 또는 LINQ로 변환하는 방법을 알려 주시겠습니까?

올바른 SQL 코드는 다음과 같습니다.

CollectID, URL, UserID, PubTime By URL, CollectID, UserID, PubTime이있는 PubTime> = (D.URL = Collect.url) 주문에서 수집 한 수집 D에서 최대 (PubTime)를 선택하여 Collect.pubTime Desc를 선택하십시오.

데이터베이스 테이블 스크립트는 다음과 같습니다.

존재하는 경우 (id = object_id ( '[collect]' ') 및 ObjectProperty (id,'isusertable ') = 1) 드롭 테이블 [collect

테이블 [Collect] ([CollectID] [int] Identity (1, 1) NOL NOT NULL, [url] [NVARCHAR] (200) NULL, [userID] [NVARCHAR] (50) NULL, [PubTime] [DateTime] NULL )

Alter Table [Collect] NOCHECK ADD ADD 제약 조건 [PK_COLLECT] 기본 키 비 클러스터 ([CollectID]) 설정 Identity_Insert [Collect] on

삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (1, 'www.sohu.com', 'Mike', '2008-10-10 0:00:00') 삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (2, 'www.echina365.com', '릴리', '2008-10-15 0:00:00') 삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (3, 'www.php.com', 'Tom', '2008-10-20 0:00:00') 삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (4, 'www.echina365.com', 'Yaoming', '2008-10-23 0:00:00') 삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (5, 'www.echina365.com', 'Mike', '2008-10-25 0:00:00') 삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (6, 'www.sohu.com', 'Jack', '2008-10-26 0:00:00') 삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (7, 'www.echina365.com', 'Tracy', '2008-11-2 0:00:00') 삽입 [Collect] ([CollectID], [url], [userId], [PubTime]) 값 (8, 'www.php.com', 'Yaoming', '2008-11-5 0:00:00')

Identity_insert [Collect]를 설정하십시오

도움이 되었습니까?

해결책

"가있는"조건이 실제로 집계 된 열에 있지 않기 때문에 "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();

그래도 나는 당신의 의도를 잘못 해석 할 수 있습니다. 아마도 내 버전의 쿼리는 당신이 원하는 것을 정확하게 수행하지 않을 것입니다. 그렇다면 의견을 남겨 주시면 문제를 혼동하지 않도록 답을 삭제하겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top