在DataTable中选择一行,并将标题名称更改为新名称,并按名字和姓氏排序

时间:2014-02-14 23:31:40

标签: linq datatable

如何使用linq重新分配标题名称?我尝试了MyHeaderName,但这不起作用。我还想按名字和姓氏排序。

DataTable dataTable = ...retrieve from some data set... 

var myNames = dataTable.AsEnumerable().Select( x => x["first"] & x["last"], "MyHeaderName" ).orderBy("first", "last");

1 个答案:

答案 0 :(得分:1)

您不能只更改单个DataRow的列名称。 DataRow与父DataTable绑定(因此其列和列名称)。

您可以更改DataTable的列名称,该列名将反映在其DataRow的所有内容中...

dataTable.Columns["name"].ColumnName = "new name";

从您的编辑看起来,您希望拥有一个包含全名的列。您可以先创建一个新列,然后在循环中填充DataRow字段...

dataTable.Columns.Add("fullName");
foreach (var row in dataTable.Rows)
{
    row["fullName"] = row["first"].ToString() + " " + row["last"].ToString();
}
// gets an enumerable of DataRow (the entire row) sorted by first then last
var myNames = dataTable.AsEnumerable()
                 .OrderBy(r => r["first"].ToString())
                 .ThenBy(r => r["last"].ToString());

或者您可以使用LINQ投影到具有名为FullName的字段的匿名对象(您可以添加所需的更多字段)...

var myNames = dataTable.AsEnumerable()
                       .OrderBy(r => r["first"].ToString())
                       .ThenBy(r => r["last"].ToString())
                       .Select(x => new { FullName = x["first"].ToString() + " " + x["last"].ToString() });

foreach (var person in myNames)
{
    Console.WriteLine(person.FullName);
}