【问题标题】:Linq is producing unintended sql with left outer joinLinq 正在生成带有左外连接的意外 sql
【发布时间】:2014-03-21 23:52:33
【问题描述】:

我有一个 linq 语句,它应该产生一个通用的左外连接(特别是空值),但它产生了一个奇怪的 sql,它也使用 count(*)

这是 linq:

(from ccc in cDataContext.CategoryCountryCategoryTypeMappings
 join cl in currentLogs on ccc.CategoryCountryCategoryTypeMappingID equals
 cl.CategoryCountryCategoryTypeMappingID 
 into final
 select final);

当前日志如下所示:

 (from dll in cDataContext.DownloadLogs
  where dll.DTS.Hour == DateTime.Now.Hour && dll.DTS.Date== DateTime.Now.Date
  select dll)

输出的sql变成:

 SELECT [t1].[LogId], [t1].[CategoryCountryCategoryTypeMappingID], [t1].[CaptureTime], [t1].[Response], [t1].[DTS], [t1].[DLID], (
    SELECT COUNT(*)
    FROM clients.[dbo].[DownloadLog] AS [t2]
    WHERE ([t0].[CategoryCountryCategoryTypeMappingID] = [t2].[CategoryCountryCategoryTypeMappingID]) 
) AS [value]
FROM clients.[Store].[CategoryCountryCategoryTypeMappings] AS [t0]
LEFT OUTER JOIN clients.[dbo].[DownloadLog] AS [t1] ON ([t0].[CategoryCountryCategoryTypeMappingID] = [t1].[CategoryCountryCategoryTypeMappingID])
ORDER BY [t0].[CategoryCountryCategoryTypeMappingID], [t1].[LogId]

我在寻找什么:

SELECT * FROM 
clients.[Store].[CategoryCountryCategoryTypeMappings] AS [t0]
LEFT INNER JOIN clients.[dbo].[DownloadLog] AS [t1] 
ON ([t0].[CategoryCountryCategoryTypeMappingID] = [t1].[CategoryCountryCategoryTypeMappingID])

如何生成所需的 sql?

【问题讨论】:

    标签: c# sql sql-server linq


    【解决方案1】:

    MSDN 有很好的 linq 示例。 http://msdn.microsoft.com/en-US/vstudio/ee908647.aspx

    对于左外连接:

    var q = 
        from c in categories 
        join p in products on c equals p.Category into ps 
        from p in ps.DefaultIfEmpty() 
        select new { Category = c, ProductName = p == null ? "(No products)" : p.ProductName }; 
    

    【讨论】:

    • 寻找左内连接
    • @Ukemi:您帖子的“我在寻找什么”部分说您正在寻找“左外连接”。是哪个?
    • @Ukemi:哪个是你的错误?您是在寻找内部还是外部?内连接不需要特殊语法,这里的答案提供了外连接的语法。
    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多