Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Linq将两个表连接到多个列上,并按分组进行计数_Linq_Join_Count_Group By_Aggregate - Fatal编程技术网

C#Linq将两个表连接到多个列上,并按分组进行计数

C#Linq将两个表连接到多个列上,并按分组进行计数,linq,join,count,group-by,aggregate,Linq,Join,Count,Group By,Aggregate,我需要将五列上的两个实体连接起来,并且我需要按SELECT plus中的每列进行分组,并获得每个GROUP BY的计数。虽然这在SQL中对我来说是小菜一碟,但对于我能找到的每个LINQ示例,我都感到无可救药的困惑 我发现以下两个问题(和)与我的问题类似,但我仍然对如何做到这一点感到困惑。以下是我的SQL语句: SELECT o.org_hq_name, o.org_command_name, o.org_region_name, o.org_in

我需要将五列上的两个实体连接起来,并且我需要按SELECT plus中的每列进行分组,并获得每个GROUP BY的计数。虽然这在SQL中对我来说是小菜一碟,但对于我能找到的每个LINQ示例,我都感到无可救药的困惑

我发现以下两个问题(和)与我的问题类似,但我仍然对如何做到这一点感到困惑。以下是我的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
我在下面有一个链接:

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
             };
我在下面有一个小组:

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

                // I am not sure how to get the count

            } into asset
            select new
            {
                // I cannot figure out how to join
            }

请帮助我了解在两个表上,但在两个表的多个列上使用联接进行分组的语法,并获取每个分组的计数。

您的查询可以像这样在Linq中重写

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}
         group new {m,o} by new {   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
                                } into gr
         select new
         {
            org_hq_name = gr.Key.org_hq_name,
            org_command_name = gr.Key.org_command_name,
            org_region_name = gr.Key.org_region_name,
            org_installation_name = gr.Key.org_installation_name,
            org_site_name = gr.Key.org_site_name,
            org_subsite_name = gr.Key.org_subsite_name,
            org_hq_id = gr.Key.org_hq_id,
            org_command_id = gr.Key.org_command_id,
            org_region_id = gr.Key.org_region_id,
            org_installation_id = gr.Key.org_installation_id,
            org_site_id = gr.Key.org_site_id,
            Count = gr.Count()
         };

嘿,崔佛!我有一个新问题,是这个问题的续集。也许这对你来说是个简单的问题。