如何使用 LINQ 按多个字段分组和排序
How to GroupBy and Order by multiple fields with LINQ
我有一个包含 4 个字段的数据表 (dtResult),id、store、sku 和 qty。不幸的是,我要删除的 DataTable 中有很多重复项(数量不同,但其他字段相同)。
我想按 id asc、store asc、sku asc 对 DataTable 进行排序,并按 id、store 和 sku 进行分组,这样我就有了一个唯一记录列表。
理想情况下,我想用查询结果覆盖现有的 DataTable,并且所有内容的数量都可以为 0。我有排序,目前我正在将它放入一个新的数据表中:
var dtUniqueResults = dtResult.AsEnumerable()
.OrderBy(r => r.Field<string>("id"))
.ThenBy(r => r.Field<string>("store"))
.ThenBy(r => r.Field<string>("sku"))
.CopyToDataTable();
我不明白如何使用 LINQ 进行分组。我想我需要添加这样的东西,但它不起作用。
var dtUniqueResults = dtResult.AsEnumerable()
.GroupBy(n => n.Field<string>("id"),
n => n.Field<string>("store"),
n => n.Field<string>("sku")
)
.OrderBy(r => r.Field<string>("id"))
.ThenBy(r => r.Field<string>("store"))
.ThenBy(r => r.Field<string>("sku"))
.CopyToDataTable();
我阅读了很多帖子,并且看到了几种实现方法。不过推荐最多的好像是这两个,但是看起来差别太大了,反而让我更加迷惑了。
GroupBy( x => new { x.Column1, x.Column2 })
AND
GroupBy(x=> new { x.Column1, x.Column2 }, (key, group) => new
{
Key1 = key.Column1,
Key2 = key.Column2,
Result = group.ToList()
});
如果您需要过滤掉重复项,请尝试以下查询:
var dtUniqueResults = dtResult.AsEnumerable()
.GroupBy(n => new
{
Id = n.Field<string>("id"),
Store = n.Field<string>("store"),
Sku = n.Field<string>("sku")
}
)
.SelectMany(g => g.Take(1)) // get from group only one record
.CopyToDataTable();
我有一个包含 4 个字段的数据表 (dtResult),id、store、sku 和 qty。不幸的是,我要删除的 DataTable 中有很多重复项(数量不同,但其他字段相同)。
我想按 id asc、store asc、sku asc 对 DataTable 进行排序,并按 id、store 和 sku 进行分组,这样我就有了一个唯一记录列表。
理想情况下,我想用查询结果覆盖现有的 DataTable,并且所有内容的数量都可以为 0。我有排序,目前我正在将它放入一个新的数据表中:
var dtUniqueResults = dtResult.AsEnumerable()
.OrderBy(r => r.Field<string>("id"))
.ThenBy(r => r.Field<string>("store"))
.ThenBy(r => r.Field<string>("sku"))
.CopyToDataTable();
我不明白如何使用 LINQ 进行分组。我想我需要添加这样的东西,但它不起作用。
var dtUniqueResults = dtResult.AsEnumerable()
.GroupBy(n => n.Field<string>("id"),
n => n.Field<string>("store"),
n => n.Field<string>("sku")
)
.OrderBy(r => r.Field<string>("id"))
.ThenBy(r => r.Field<string>("store"))
.ThenBy(r => r.Field<string>("sku"))
.CopyToDataTable();
我阅读了很多帖子,并且看到了几种实现方法。不过推荐最多的好像是这两个,但是看起来差别太大了,反而让我更加迷惑了。
GroupBy( x => new { x.Column1, x.Column2 })
AND
GroupBy(x=> new { x.Column1, x.Column2 }, (key, group) => new
{
Key1 = key.Column1,
Key2 = key.Column2,
Result = group.ToList()
});
如果您需要过滤掉重复项,请尝试以下查询:
var dtUniqueResults = dtResult.AsEnumerable()
.GroupBy(n => new
{
Id = n.Field<string>("id"),
Store = n.Field<string>("store"),
Sku = n.Field<string>("sku")
}
)
.SelectMany(g => g.Take(1)) // get from group only one record
.CopyToDataTable();