C# Linq在多个列上连接2个表并使用GROUP BY进行计数。
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的计数的语法。
问题的原因是需要在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中使用多个列进行表连接,并且对结果进行分组计数的功能。