2016-09-08 14 views
0

個別の列(OperationTypeId)を使用しているほんの少数のレコードに対してクエリを実行している大きなテーブル(〜300万行)があります。 SQL Management Studioでは、4秒後に実行され、7行を返す次のクエリを使用しています。LINQ Distinct By One列のタイムアウトエラーを選択

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」にインデックスがありますか? Btw、 '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();