C# Linq在多个列上连接2个表并使用GROUP BY进行计数。

6 浏览
0 Comments

C# Linq在多个列上连接2个表并使用GROUP BY进行计数。

我需要在五个列上将两个实体进行JOIN操作,并且我需要在SELECT中对每个列进行GROUP BY操作,并在每个GROUP BY中获取一个COUNT。虽然在SQL中对我来说很简单,但是对于我能找到的每个LINQ示例,我都感到困惑。

我找到了以下两个类似的问题(C# Linq Group By on multiple columns [duplicate]Group By Multiple Columns),但我仍然对如何实现这个目标感到困惑。这是我的SQL语句:

SELECT  o.org_hq_name,
        o.org_command_name,
        o.org_region_name,
        o.org_installation_name,
        o.org_site_name,
        o.org_subsite_name,
        o.org_hq_id,
        o.org_command_id,
        o.org_region_id,
        o.org_installation_id,
        o.org_site_id,
        count(org_site_id) AS count
FROM    organization o, asset a
WHERE      o.org_hq_id = hq_org_id
AND        o.org_command_id = a.command_org_id
AND        o.org_region_id = a.region_org_id
AND        o.org_installation_id = a.installation_org_id
AND        o.org_site_id = a.site_org_id
GROUP BY o.org_hq_name,
        o.org_command_name,
        o.org_region_name,
        o.org_installation_name,
        o.org_site_name,
        o.org_subsite_name,
        o.org_hq_id,
        o.org_command_id,
        o.org_region_id,
        o.org_installation_id,
        o.org_site_id

我有一个JOIN操作如下:

var join1 =  from m in context.asset
             join o in context.organization
             on new {hqID = a.hq_org_id, commandID = a.command_org_id, regionID = a.region_org_id, installationID = a.installation_org_id, siteID = a.site_org_id}
             equals new {hqID = o.hq_id, commandID = o.command_id, regionID = o.region_id, installationID = o.installation_id, siteID = o.site_id}
             select new
             {
                 hqID = o.hq_id,
                 commandID = o.command_id,
                 regionID = o.region_id,
                 installationID = o.installation_id,
                 siteID = o.site_id
                 //hqId = o.count(org_site_id) AS count
             };

我有一个GROUP BY操作如下:

var group1 = from a in context.asset
            group a by new
            {
                a.hq_org_id,
                a.command_org_id,
                a.region_org_id,
                a.installation_org_id,
                a.site_org_id
                // 我不确定如何获取count
            } into asset
            select new
            {
                // 我无法弄清楚如何进行JOIN操作
            }

请帮助我使用JOIN将两个表按照两个表的多个列进行GROUP BY操作,并获取每个GROUP BY的计数的语法。

0
0 Comments

问题的原因是需要在C# Linq中使用多个列进行表连接,并且对结果进行分组计数。解决方法是使用匿名类型和group by子句来实现。

在给定的问题中,需要将两个表(asset和organization)按照多个列进行连接,并且对结果进行分组计数。为了实现这个目标,可以使用Linq查询表达式来重写查询。

首先,我们使用join子句将asset表和organization表连接起来。在连接过程中,我们使用匿名类型来指定连接的列,这些列包括hqID、commandID、regionID、installationID和siteID。这些列分别对应于asset表和organization表中的列。

接下来,我们使用group by子句将连接的结果按照组别进行分组。在这里,我们使用了一个匿名类型来指定分组的列,这些列包括org_hq_name、org_command_name、org_region_name、org_installation_name、org_site_name、org_subsite_name、org_hq_id、org_command_id、org_region_id、org_installation_id和org_site_id。这些列对应于organization表中的列。

最后,我们使用select子句将分组的结果映射到一个新的匿名类型中。这个新的匿名类型包含了组别的列以及一个Count属性,用于记录每个组别中的记录数。

通过这样的查询表达式,我们可以实现在C# Linq中使用多个列进行表连接,并且对结果进行分组计数的功能。

0