LINQを使用してDataTableから名前の明確で順序付けられたリストを取得するにはどうすればよいですか?


104

私が持っているDataTableNameコラム。アルファベット順に並べられた一意の名前のコレクションを生成したい。次のクエリは、order by句を無視します。

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

なぜorderby強制されないのですか?

回答:


37

読みやすく、保守しやすくするために、複数のLINQステートメントに分割することもできます。

  1. まず、データを新しいリストに選択し、それを呼び出しましょう。x1必要に応じて投影を行います
  2. 次に、必要な区別を使用しx1x2、into からへの個別のリストを作成します
  3. 最後に、順序付けられたリストをからx2に作成しx3、必要に応じて並べ替えます

55

問題は、Distinctオペレーターが元の値の順序を維持することを許可しないことです。

したがって、クエリは次のように機能する必要があります

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );


8

以下を試してください:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);

3

以下をお試しください

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

これはあなたが必要とするもののために働くはずです。



2

あなたはそのようなものを使うことができます:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.