c# - 将 Linq to Sql 查询转换为更好的 sql

标签 c# sql sql-server linq

所以我需要一些带有 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/

相关文章:

sql - SQL select语句中Order By 1的作用是什么?

sql-server - 关于 CHAR(13) + CHAR(10) 的 SQL Server Management Studio 结果不一致

c# - 从 SQL Server 请求 webform 中的 nvarchar 类型时出错

c# - C#原始套接字接收数据包

c# - 设计数据驱动的逻辑系统

mysql使用IN动态sql

sql-server - 如何在 SQL Server 中使用 alter 设置列的默认值?

c# - 如何为 out 参数指定 Ensures?

c# - 在 nuget 包中使用 PowerShell 编辑 Global.asax

sql - 正则表达式到以下字符串