2016-09-08 12 views
0

我有一個大型表(約300萬行),我只查詢使用不同的列(OperationTypeId)的幾條記錄。在SQL Management Studio中,我使用以下查詢,它在4秒內執行並返回7行。LINQ選擇不同的列超時錯誤

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

你有'OperationTypeId'上的索引嗎?順便說一下,'FirstOrDefault'是不必要的,你可以放心地使用'First'。 –

+0

不幸的是沒有:(。 – AngieM

回答

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();