8

我很难将 sql 转换为 linq 语法。

我有 2 个表(Category 和 CategoryListing),它们使用 CategoryID 相互引用。我需要获取 Category 表中所有 CategoryID 的列表以及 CategoryListing 表中所有相应匹配项的 CategoryID 计数。如果 CategoryID 不存在于 CategoryListing 中,则仍应返回 CategoryID - 但频率为 0。

以下 sql 查询演示了预期的结果:

SELECT c.CategoryID, COALESCE(cl.frequency, 0) as frequency
FROM Category c
LEFT JOIN (
    SELECT cl.CategoryID, COUNT(cl.CategoryID) as frequency 
    FROM CategoryListing cl
    GROUP BY cl.CategoryID
) as cl
ON c.CategoryID = cl.CategoryID
WHERE c.GuideID = 1
4

2 回答 2

15

未经测试,但这应该可以解决问题:

var q = from c in ctx.Category
        join clg in 
            (
                from cl in ctx.CategoryListing
                group cl by cl.CategoryID into g
                select new { CategoryID = g.Key, Frequency = g.Count()}
            ) on c.CategoryID equals clg.CategoryID into cclg
        from v in cclg.DefaultIfEmpty()
        where c.GuideID==1
        select new { c.CategoryID, Frequency = v.Frequency ?? 0 };
于 2009-02-18T10:12:24.590 回答
0

我继续将整个查询移动到数据库上的存储过程。这首先通过避免使用 LINQ 来解决问题。

于 2014-02-13T16:11:16.020 回答