如何使用linq重新分配标题名称?我尝试了MyHeaderName,但这不起作用。我还想按名字和姓氏排序。
DataTable dataTable = ...retrieve from some data set...
var myNames = dataTable.AsEnumerable().Select( x => x["first"] & x["last"], "MyHeaderName" ).orderBy("first", "last");
答案 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);
}