如何使用LINQ(或TSQL)对数据集进行分组,但包括顶级项和计数
我正在努力解决这个问题。我有一个TSQL SQL2005查询返回的基本数据集,其中数据包含主项和详细项的列表。非常简单,您的主表已连接到详细表,因此每个主记录可以返回多行 比如:如何使用LINQ(或TSQL)对数据集进行分组,但包括顶级项和计数,linq,tsql,Linq,Tsql,我正在努力解决这个问题。我有一个TSQL SQL2005查询返回的基本数据集,其中数据包含主项和详细项的列表。非常简单,您的主表已连接到详细表,因此每个主记录可以返回多行 比如: ID / Item Descr / Subitem Descr 1 / Jane Doe / shoes 1 / Jane Doe / hats 2 / John Smith / hats 我想做的是把它展平一点。比如: ID / Item Descr / Count / Most Recent Subitem
ID / Item Descr / Subitem Descr
1 / Jane Doe / shoes
1 / Jane Doe / hats
2 / John Smith / hats
我想做的是把它展平一点。比如:
ID / Item Descr / Count / Most Recent Subitem
1 / Jane Doe / 2 / shoes
2 / John Smith / 1 / hats
关于sql查询的任何建议,或者我可以在从初始sql查询返回的数据集上运行的LINQ查询…?不太清楚top是什么意思,但如果您想在sql中执行此操作,这是一个开始:
var q = from i in Context.Items
group i by i.ItemDescr into g
select new
{
ID = g.FirstOrDefault().ID,
ItemDescr = g.Key,
Count = g.Count(),
MostRecentSubItem = g.FirstOrDefault().SubitemDescr // you don't show how to pick the "most recent"
};
SELECT id, ItemDesc, COUNT(*), MAX(SubItemDesc)
FROM MyTable
GROUP BY id, ItemDesc
我最终使用了一个相关子查询,从性能的角度来看,这总是让我感到紧张。我没有数据支持,也不擅长阅读执行计划,这只是一种直觉 这上面有很多很好的stackoverflow示例,让我走上了这条路:而且 我想知道使用任何新的窗口函数row_number或rank是否会有所帮助,但我并没有走得太远
我仍然在想,如果只是将所有的主细节行拉回来,然后使用LINQ对它们进行后期处理是否会更好。我们的SQL Server会非常快地将数据集返回到web服务器,然后通过在web服务器上执行LINQ来分配工作负载,最后将其绑定到我的ASP.NET gridview并发送给客户端。有很多活动部件,但可能很有趣……您如何确定哪个项目(例如,Jane Doe的鞋子或帽子)在该数据集中处于首位?另外,您使用的RDBMS/版本是什么?