私は列を持ってDataTable
いName
ます。アルファベット順に並べられた一意の名前のコレクションを生成したいと思います。次のクエリは、orderby句を無視します。
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
なぜorderby
強制されないのですか?
問題は、Distinct演算子が、元の値の順序を維持することを許可しないことです。
したがって、クエリは次のように機能する必要があります
var names = (from DataRow dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy( name => name );
読みやすく保守しやすくするために、複数のLINQステートメントに分割することもできます。
x1
、必要に応じて投影を行いますx1
への個別のリストを作成しますx2
x2
好きx3
なもので並べ替えますvar sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
次のことを試してください。
dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
次を試してください
var names = (from dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy(name => name);
これはあなたが必要とするもののために働くはずです。
要約すると、すべての答えには共通点があります。
OrderByは最終操作である必要があります。
次のようなものを使用できます。
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);