114

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

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

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

4

7 に答える 7

57

問題は、Distinct演算子が、元の値の順序を維持することを許可しないことです。

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

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
于 2008-08-01T13:18:37.640 に答える
39

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

  1. まず、データを新しいリストに選択し、それを呼び出してx1、必要に応じて投影を行います
  2. 次に、必要な区別を使用して、からx1への個別のリストを作成しますx2
  3. 最後に、順序付けられたリストを作成し、x2好きx3なもので並べ替えます
于 2008-09-04T02:57:27.263 に答える
11
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
于 2008-12-05T01:08:22.033 に答える
8

次のことを試してください。

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
于 2013-04-28T09:27:13.573 に答える
3

次を試してください

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

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

于 2008-08-07T02:35:28.637 に答える
2

要約すると、すべての答えには共通点があります。

OrderByは最終操作である必要があります。

于 2018-01-30T16:19:51.153 に答える
2

次のようなものを使用できます。

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
于 2018-06-25T10:56:10.077 に答える