【问题标题】:Linq to SQL conversion...unable to add second COUNTLinq 到 SQL 的转换...无法添加第二个 COUNT
【发布时间】:2018-04-14 15:04:54
【问题描述】:

我正在尝试将我的 SQL 语句转换为 Linq 语句,但我不确定如何将第二个 COUNT 添加到其中。这是我的 SQL 语句

SELECT l.Campus_Name, Labs = COUNT(*), LabsWithSubnets = COUNT(s.Lab_Space_Id)
FROM vw_Lab_Space l
LEFT JOIN vw_Subnet s on l.Lab_Space_Id = s.Lab_Space_Id
GROUP BY l.Campus_Name
ORDER BY 1

这是我目前为止的 LINQ 语句:

from l in Vw_Lab_Space
from s in Vw_Subnet
            .Where(s => s.Lab_Space_Id == l.Lab_Space_Id)
            .DefaultIfEmpty()   // <=- triggers the LEFT JOIN
group l by new { l.Campus_Name } into g
orderby g.Key.Campus_Name
select new {
    Campus_Name = g.Key.Campus_Name,
    Labs = g.Count()
}

所以我什么都有,除了LabsWithSubnets 部分。我只是不确定如何添加它,因为我不能在 select 语句中只做一个s.Lab_Space_id.Count()

如果您需要表结构和示例数据,请参阅Need help creating an OUTER JOIN to count spaces

【问题讨论】:

    标签: linq linq-to-sql


    【解决方案1】:

    使用您的查询作为基础,您需要包含 s 的组,以便您可以在非空时进行计数(我还删除了分组键周围不必要的匿名对象):

    from l in Vw_Lab_Space
    from s in Vw_Subnet
                .Where(s => s.Lab_Space_Id == l.Lab_Space_Id)
                .DefaultIfEmpty()   // <=- triggers the LEFT JOIN
    group new { l, s } by l.Campus_Name into g
    orderby g.Key
    select new {
        Campus_Name = g.Key,
        Labs = g.Count(),
        LabsWithSubnets = g.Count(ls => ls.s != null)
    }
    

    但是,与其翻译 SQL,我可能会利用 LINQ 的组连接来稍微不同地处理查询:

    var ans = from l in Vw_Lab_Space
              join s in Vw_Subnet on l.Lab_Space_Id equals s.Lab_Space_Id into sj
              group new { l, sj } by ls.Campus_Name into lsjg
              select new {
                  Campus_Name = lsjg.Key,
                  NumLabs = lsjg.Count(),
                  LabsWithSubnets = lsjg.Sum(lsj => lsj.sj.Count())
              };
    

    PS 即使在您的查询中,我也会使用 join...from...DefaultIfEmpty 而不是 from...from...where 但取决于您的数据库引擎,可能无关紧要。

    【讨论】:

    • 谢谢。当我执行into sj 时,我发现无法添加WHERE 条件。那还有可能吗?比如我想做where l.Business_Unit &lt;&gt; "xyz"
    • 如果在l 上,则将位置放在fromjoin 之间。
    • 谢谢。最终我要弄清楚linq!
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多