1


0

DataTableを2列で、NULLで、おそらくLINQを使ってソートするにはどうすればいいですか?

私は最初にcolumn1でソートし、次にcolumn2でソートする必要があるADO.Netデータテーブルがあります。 並べ替えたら、行から値をいくつか読み込んでリストビューに追加する必要があります。

私はこのDataTable.DefaultView.Sortを実行するコードを書きました(2回実行)。 しかしよりよい方法があるかどうか疑問に思います。

私は多分LINQを考えていた…​だから私は試した:

OrderedEnumerableRowCollection queryX = dt.AsEnumerable()
            .OrderBy(c => c.Field("column1"))
            .ThenBy(c => c.Field("column2"));

しかし、この "System.InvalidCastExceptionは処理されませんでした"エラー。 これはNULLが原因であると想定したので、テストとしてデータテーブル「 "where column1 IS NOT NULL"」に対するクエリを指定してもエラーが発生します。

私はLINQの経験があまりないので、次のように質問します。

  • 上記の私のコードで何が間違っていますか? 概念的に私は行方不明です LINQの仕組みに関する何か

  • NULLを除外してもまだこれが発生するのはなぜですか? 繰り返しますが、概念的に 私はLINQの仕組みについて何かが欠けています

  • これを行うより良い\正しいLINQクエリはありますか?

  • これを行うためのより良い\正しい(よりエレガントな)方法がありますか(LINQまたは ない)?

tep

2 Answer


10


DataTableがある場合は、http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx[DataView]を参照してください。

private void SortByTwoColumns(){// DataTableのDefaultViewManagerを取得します。 DataViewビュー= DataTable1.DefaultView;

//デフォルトでは、最初の列は昇順にソートされています。 view.Sort = "State、ZipCode DESC"; }

ソース:http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx


0


これらの列のデータ型がわからない場合は、intと仮定しますが、データベースがOracleの場合は、次のことを試してください。

OrderedEnumerableRowCollection queryX = dt.AsEnumerable().OrderBy(c => c.Field( "column1"));