2014-03-29 103 views
1

所以我需要一些sql查詢。 linq生成的sql看起來非常不合理,並且存儲過程超時。將Linq轉換爲更好的sql查詢sql

這裏就是我想要做的事。

兩個表,如下所示:

dbo.Links 
------------- 
Id 
Url 
Title 

而另外一個看起來像這樣

dbo.Link_Counts 
----------------- 
Url 
Count 

我想什麼做的是寫一個SQL查詢,這是否

var linkCounts = Links.GroupBy(x => x.Url) 
       .Select(grp => new Link_Counts 
        { 
         Url = grp.First().Url, 
         Count = grp.Count() 
        }); 

InsertAllOnSubmit(linkCounts); 
SubmitChanges(); 

,我嘗試使用這部分是從該生成的SQL是

INSERT INTO Link_Counts (Url, Count) 
SELECT (
    SELECT [t3].[URL] 
    FROM (
     SELECT TOP (1) [t2].[URL] 
     FROM [Links] AS [t2] 
     WHERE (([t1].[URL] IS NULL) AND ([t2].[URL] IS NULL)) OR (([t1].[URL] IS NOT NULL) AND ([t2].[URL] IS NOT NULL) AND ([t1].[URL] = [t2].[URL])) 
     ) AS [t3] 
    ) AS [Url], [t1].[value] AS [Count] 
FROM (
    SELECT COUNT(*) AS [value], [t0].[URL] 
    FROM [Links] AS [t0] 
    GROUP BY [t0].[URL] 
    ) AS [t1] 
END 

凡顯然過長運行存儲過程。

任何幫助將不勝感激。

感謝

回答

3

如果你想手工編寫的SQL:

insert into link_counts (url, count) 
select url, count(0) 
from links 
group by url 

或者,如果你只是想修復LINQ查詢生成更好的SQL:

var linkCounts = 
    Links.GroupBy(x => x.Url) 
     .Select(g => new Link_Counts 
      { 
       Url = g.Key, 
       Count = g.Count() 
      }; 
+0

oops ...在linq查詢上很好的調用 –

2

我覺得這是你需要插入每個URL的算什麼:

insert into Link_Counts (Url, Count) 
select Url, Count(*) 
from dbo.Links 
group by Url