c#datatable选择特定条件的最后一行

时间:2015-02-21 17:41:02

标签: c# .net datatable

我有一个数据表有像这种格式的数据

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

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

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

......... City1 ......

......... City1 ......

......... City1 ......

......... ......城2

......... ......城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只是克隆当前表的结构,而不是行。