LINQ选择区分一列超时错误

时间:2016-09-08 13:53:45

标签: c# sql-server linq linq-to-sql

我有一个大表(约300万行),我只使用不同的列(OperationTypeId)查询几条记录。在SQL Management Studio中,我使用以下查询,该查询在4秒内执行并返回7行。

SELECT  *
FROM    (SELECT t.ReferenceNumber, t.OperationTypeId,
        ROW_NUMBER() OVER (PARTITION BY OperationTypeId     
         ORDER BY OperationTypeId) AS RowNumber
         FROM   TP_Transaction t) AS a
WHERE   a.RowNumber = 1

我正在尝试使用LINQ to SQL在代码中完成相同的结果,这是我的代码。

var temp = dbConn.TP_Transactions
                .GroupBy(x => x.OperationTypeId)
                .Select(g => new {OperationTypeId = g.Key, ReferenceNumber = g.FirstOrDefault().ReferenceNumber})
                .ToList();

但是,此代码会导致异常:

  

超时已过期。操作完成之前经过的超时时间或服务器没有响应。

请告知我可以采取哪些措施来完成此查询。

1 个答案:

答案 0 :(得分:0)

我最后这样做了。它仍然需要很长时间才能运行(约2分钟),但至少我得到了一些结果。

const string sqlQuery = @"SELECT  *
                    FROM    (SELECT t.ReferenceNumber,
                    ROW_NUMBER() OVER (PARTITION BY OperationTypeId ORDER BY OperationTypeId) AS RowNumber
                    FROM   TP_Transaction t) AS a
                    WHERE   a.RowNumber = 1";
var temp = dbConn.ExecuteQuery<Temp>(sqlQuery).ToList();