在数据表中对行进行排序

4

我有一个数据表,希望将所有名字和姓氏相符的行移动到表格顶部。

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表达式或比较器来完成此操作,而不必创建新的数据表?

你是想修改数据库中的顺序吗?还是只是获取一个有序的结果? - crashmstr
好的,我猜你可以看一下DataViews/DefaultView - 这可能适合你。 (但是你必须使用DataView而不是自然排序!) - user2864740
如果您在 DataTable 上使用 .AsEnumerable() (http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx),那么您可以对其应用所有的 LINQ 排序/过滤/转换等操作。 - David
3个回答

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(); 

2

在 LINQ 中,它的代码看起来可能像这样:

var sortedNames = unsortedNames.OrderBy(n => n == lastName ? 1 : 2).ThenBy(n => n == firstName ? 1 : 2));

0
DataView dv=datatable.DefaultView;
dv.Sort = "ColumnName Asc ,ColumnName Asc, ColumnName Asc , ColumnName Asc";
datatable=dv.toTable().Copy();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接