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 式または比較子を使用してこれを行う方法はありますか?

4

3 に答える 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(); 
于 2013-11-05T19:45:42.843 に答える
2

Linq では、次のようになります。

var sortedNames = unsortedNames.OrderBy(n => n == lastName ? 1 : 2).ThenBy(n => n == firstName ? 1 : 2));
于 2013-11-05T19:51:00.557 に答える
0
DataView dv=datatable.DefaultView;
dv.Sort = "ColumnName Asc ,ColumnName Asc, ColumnName Asc , ColumnName Asc";
datatable=dv.toTable().Copy();
于 2013-11-06T06:20:28.223 に答える