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
如何使用LINQ(或TSQL)对数据集进行分组,但包括顶级项和计数_Linq_Tsql - Fatal编程技术网

如何使用LINQ(或TSQL)对数据集进行分组,但包括顶级项和计数

如何使用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

我正在努力解决这个问题。我有一个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
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/版本是什么?