怎樣才能使我能夠通過2個列進行分組并獲得MAX其他各列
假設我有這個:
DataTable dt = new DataTable()。
dt.Columns.Add("s1", typeof(string)。
dt.Columns.Add("s2", typeof(string)) 。
dt.Columns.Add("nt1", typeof(int)) 。
dt.Columns.Add("nt2", typeof(int) 。)
//這里我們添加五個DataRows.。
dt.Rows.Add("g1", "gg1", 1, 16) 。
dt.Rows.Add("g2", "gg1", 2, 15)。
dt.Rows.Add("g1", "gg1", 3, 14) 。
dt.Rows.Add("g2", "gg1", 4, 13) 。
dt.Rows.Add("g1", "gg2", 5, 12)。
dt.Rows.Add("g2", "gg2", 6, 11) 。
dt.Rows.Add("g1", "gg2", 7, 10) 。
dt.Rows.Add("g2", "gg2", 8, 9)。
我想得到的是 :
g1 gg1 3 16
g1 gg2 7 12
g2 gg1 4 15
g2 gg2 8 11
這段代碼不作業 :
dt = dt.AsEnumerable()
.GroupBy(r => new
{
s1 = r["s1"/span>]。
s2 = r["s2"].
})
.Select(x => x.Max())
.CopyToDataTable()。
給我的錯誤 :
嚴重程度代碼描述專案檔案行抑制狀態錯誤 CS0311 型別'System.Linq.IGrouping<string, string>'不能被用作 作為型別引數'T'使用在通用型別或方法中 'DataTableExtensions.CopyToDataTable(IEnumerable)'。不存在 從'System.Linq.IGrouping<string, string>'到'System.Data.DataRow'。 C:UsersTECNOsource epos estt esttProgram.cs 44 Active
uj5u.com熱心網友回復:
因此,錯誤發生在CopyToDataTable,因為型別不匹配。你需要將GroupBy的結果轉換為DataRow的IEnumerable。
我沒有在LINQ中作業過很長時間,你需要在呼叫CopyToDataTable之前應用一個Select,并確保你選擇s1,s2,Max(nt1)和Max(nt2)。也許你還需要呼叫ToList,我不確定,但你肯定需要在分組后再做一次Select。
uj5u.com熱心網友回復:
好了,這段代碼解決了這個問題
謝謝大家 var query = dt.AsEnumerable()
.GroupBy(x => new
{
s1 = x["s1"/span>]。
s2 = x["s2"].
})
.選擇(grp => new {
s1 = grp.Key.s1,
s2 = grp.Key.s2,
nt1 = grp.Max(x => x["nt1"/span>])。
nt2 = grp.Max(x => x["nt2"])
});
DataTable dt2 = dt.Clone();
dt2.Clear()。
foreach (var item in query)
dt2.Rows.Add(item.s1, item.s2, item.nt1, item.nt2)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310099.html
標籤:
上一篇:如何在Linq查詢中添加一個WhereNotEquals條件
下一篇:在哪里添加分組以獲得準確的輸出
