我有一个数据表有像这种格式的数据
........ IVR ........
......... IVR ........
......... IVR ........
......... City1 ......
......... City1 ......
......... City1 ......
......... ......城2
......... ......城2
.........城2 ......
我想取每个值的最后一行。换句话说,现在是粗体的行
挑战在于我在数据表中使用这些三个行。我试图在互联网上搜索,但我不知道这个功能的名称是什么。你能帮帮我吗
答案 0 :(得分:2)
您可以GroupBy()
然后在Last()
方法的帮助下选择最后一行。
var result = from b in myDataTable.AsEnumerable()
group b by b.Field<string>("Your_Column_Name") into g
select g.Last();
DataTable filtered = myDataTable.Clone();
foreach(DataRow row in result)
{
filtered.ImportRow(row);
}
Clone
克隆了DataTable
的结构,包括所有DataTable
模式和约束。
答案 1 :(得分:1)
这可以在一个简单的循环中使用Dictionary来保存找到的行:
var cRows = new Dictionary<string, DataRow>(StringComparer.InvariantCultureIgnoreCase);
foreach (DataRow oRow in oTable.Rows)
{
var sKey = oRow["KeyValue"].ToString();
if (!cRows.ContainsKey(sKey))
{
cRows.Add(sKey, oRow);
}
else
{
cRows[sKey] = oRow;
}
}
此方法将为您指定的列中的每个唯一值存储最后一行。
将选定的行移动到新的DataTable中:
var oNewTable = oTable.Clone();
foreach (var oRow in cRows.Values)
{
oNewTable.Rows.Add(oRow);
}
Clone
只是克隆当前表的结构,而不是行。