我有一個包含 4 個欄位、id、store、sku 和 qty 的 DataTable (dtResult)。不幸的是,我要洗掉的 DataTable 中有很多重復項(數量不同,但其他欄位相同)。
我想按 id asc、store asc、sku asc 對 DataTable 進行排序,并按 id、store 和 sku 分組,這樣我就會有一個唯一記錄串列。
理想情況下,我想用查詢結果覆寫現有的 DataTable,并且 qty 可以為所有內容。我有排序,目前我將它放入一個新的資料表中:
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()
});
uj5u.com熱心網友回復:
如果您需要過濾掉重復項,請嘗試以下查詢:
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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471246.html
上一篇:EntityFrameworkCore中的動態Linq
下一篇:第一次查詢相關資料,結果重復資料
