c# datatable select 特定条件下的最后一行

c# datatable select last row on a speicfic condition

我有一个数据表有这样格式的数据

....... IVR........

.........IVR.......

.........IVR.......

............城市1......

............城市1......

.........城市1......

............城市2......

............城市2......

............城市2......

我想取每个值的最后一行。换句话说,现在加粗的行

挑战在于我想在数据表中添加这些 行。我试图在互联网上搜索,但我不知道此功能的名称是什么。你能帮帮我吗

您可以 GroupBy() 然后在 Last() 方法的帮助下 select 最后一行。

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 模式和约束。

这可以在一个简单的循环中使用字典来保存找到的行来实现:

        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;
            }
        }

此方法会将每个唯一值的最后一行存储在您指定的列中。

要将选定的行移动到新的数据表中:

        var oNewTable = oTable.Clone();

        foreach (var oRow in cRows.Values)
        {
            oNewTable.Rows.Add(oRow);
        }

Clone 只是克隆当前 table 的结构,而不是行。