假设我有一个DataTable,我想对它进行3级分组(或者将来更多)。为了简化,我将要求两个级别。
DataTable dt = getTable();使用LINQ,我可以想到两种方法。第一,
var chainWay = dt.Rows.Cast<DataRow>().GroupBy(dr => new { A = dr["A"], B = dr["B"] })
.GroupBy(g => new { g.Key.A });
foreach (var group in chainWay)
{
foreach (var group2 in group)
{
foreach (DataRow dr in group2)
{
}
}
}第二,
var recursiveWay = dt.Rows.Cast<DataRow>().GroupBy(dr => dr["A"])
.Select(g => new { g.Key, G = g.GroupBy(dr => dr["B"]) });
foreach (var group in recursiveWay)
{
foreach (var group2 in group.G)
{
foreach (DataRow dr in group2)
{
}
}
}哪条路是合适的?第一,第二还是其他?
会有什么不同的表现吗?
请记住,我想对此作一个概括(对于更多的级别)。
提前谢谢你的建议。
发布于 2014-09-26 15:25:02
这似乎是“主要基于意见”的边缘。这是我多次使用的第三种选择。它更详细,但我认为它使结构更清晰。它也很容易看到嵌套的重复性质,所以很容易推广到更多的分组。
var query = source.GroupBy(
x => x.A,
(a, aGroup) => new
{
A = a,
Items = aGroup.GroupBy(
x => x.B,
(b, bGroup) => new
{
B = b,
Items = bGroup
})
});当然,正在实例化的匿名对象可以被适当的类替换。
https://stackoverflow.com/questions/26062273
复制相似问题