Pat*_*cia 2 linq join group-by aggregate count
我需要在五个列上加入两个实体,并且需要在SELECT中的每一列上加上GROUP BY,并在每个GROUP BY上获得一个COUNT。尽管这对SQL来说对我来说是小菜一碟,但我却对我为LINQ找到的每个示例都感到困惑。
我发现了以下两个问题(在多个列[重复]上的C#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
Run Code Online (Sandbox Code Playgroud)
我在下面有一个加入:
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
};
Run Code Online (Sandbox Code Playgroud)
我下面有一个分组依据:
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
}
Run Code Online (Sandbox Code Playgroud)
请帮我在两个表上使用JOIN进行GROUP BY的语法,但是在两个表的MULTIPLE列上并获取每个group by的计数。
您的查询可以像这样在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()
};
Run Code Online (Sandbox Code Playgroud)