2016-12-13 5 views
0

다음과 같은 sql 쿼리를 사용하여 MachineLog 테이블에서 중복을 계산합니다. 이 쿼리는 ExecuteSqlCommand를 사용하여 직접 프로젝트에서 실행됩니다. 그러나 실행 시간은 1 분 이상 걸립니다.Linq의 SQL 중복 행 쿼리

select Count(*) from MachineLog where Id in 
    (
    select Id from (
    select *, 
    RANK() OVER (PARTITION BY CompanyId, DeviceEnrollNo, InOutDate, InOutTime, MachineNo ORDER BY Id DESC)rank 
    From MachineLog 
    )T 
    where rank>1 
    ) 

지금 내가 옵션 빠르게 작동 Any 존재하는 한 Linq에이 쿼리를 사용하고 싶습니다. 나는 LinqPad를 가지고 있지만 Linq를 Linq에 SQL이 아닌 &으로 변환한다. Linqer는 이미 내 시스템에서 만료되었습니다.

누군가 도울 수 있습니까?

답변

0

왜 사용하고 계신지 알고 싶다면이 번호를 사용해보십시오. 마이트 도움말 :

select Count(*) from MachineLog where Id in 
    (
    select Id from (
    select Id, 
    RANK() OVER (PARTITION BY CompanyId, DeviceEnrollNo, InOutDate, InOutTime, MachineNo ORDER BY Id DESC)rank 
    From MachineLog 
    )T 
    where rank>1 
    ) 
+0

전에. 나는 기본적으로 Linq에서이 쿼리를 변환하려고 노력하고 있으므로'Count' 대신에'Any'를 사용할 수 있습니다. – Anup

0

CTE

를 사용하여 시도; 회사 ID, DeviceEnrollNo, InOutDate, InOutTime 이드 DESC BY MachineNo 순서) BY PARTITION (OVER CTE AS ( SELECT, ID RANK()를 MachineLog 가입일 순위 ) MachineLog의 m 행 SELECT 수 (*)와 같은 는 c.id = m.ID ON CTE의 C 가입 WHERE c.rank> I 그것이 하나로서 동시에 복용이 쿼리를 시도 1