Linq中的SQL重复行查询

时间:2016-12-13 05:58:28

标签: c# sql-server linq asp.net-mvc-4

我有以下sql查询来计算表MachineLog中的重复项。这个查询我直接在我的项目中使用ExecuteSqlCommand执行。但是执行时间超过1分钟。

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
    )

现在我想在Linq中使用此查询,因为有更快的选项Any。我有LinqPad,但它将Linq转换为SQL&不是SQL到Linq。 Linqer已经从我的系统中过期了。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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
    )

答案 1 :(得分:0)

尝试使用CTE

;与cte AS(  SELECT,ID RANK()OVER(PartI by CompanyId,DeviceEnrollNo,InOutDate,InOutTime,MachineNo ORDER BY Id DESC)AS排名     来自MachineLog         )         从MachineLog m中选择Count(*)         JOIN CTE c ON c.id = m.ID.         在哪里c.rank> 1