我有一个数据表,我想将所有具有某个名字和姓氏的行移动到表格的顶部。
public DataTable SortByFirstNameAndLastNameMatch(DataTable table, string firstName, string lastName)
{
DataTable ret = new DataTable();
foreach (DataRow dataRow in table.Rows)
{
if (dataRow["NomArtiste"].ToString().ToLower() == lastName.ToLower() && dataRow["PrenomArtiste"].ToString().ToLower() == firstName.ToLower())
{
ret.ImportRow(dataRow);
}
}
ret.Merge(table);
return RemoveDuplicateRows(ret, "AlbumID");
}
有没有办法在不制作新数据表的情况下使用linq表达式或比较器来完成此操作?
答案 0 :(得分:3)
您可以在DataTable上创建一个新的DataView,并应用您认为合适的任何排序和过滤。 有关示例,请参阅http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx。
或者你可以用LINQ:
来做var sortedTableQuery = table.OrderBy(r => r["NomArtiste"].ToString() == lastName ? 0 : 1).ThenBy(r => r["PrenomArtiste"].ToString() == firstName ? 0 : 1).ThenBy(r => r["NomArtiste"].ToString()).ThenBy(r => r["PrenomArtiste"].ToString());
var a = sortedTableQuery.ToArray();
答案 1 :(得分:2)
在Linq中,它看起来像这样:
var sortedNames = unsortedNames.OrderBy(n => n == lastName ? 1 : 2).ThenBy(n => n == firstName ? 1 : 2));
答案 2 :(得分:0)
DataView dv=datatable.DefaultView;
dv.Sort = "ColumnName Asc ,ColumnName Asc, ColumnName Asc , ColumnName Asc";
datatable=dv.toTable().Copy();