所以我需要一些带有 sql 查询的东西。从 linq 生成的 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
存储过程显然运行时间过长。
任何帮助都将不胜感激。
谢谢
最佳答案
如果你想手写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()
};
关于c# - 将 Linq to Sql 查询转换为更好的 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736879/