データテーブルでの複数キーでのソート

データテーブルを複数キーでソートするのに、
DT.AsEnumerable().OrderBy(function(x) x(“キー1”).ToString()).ThenBy(function(y) y(“キー2”).ToString()).CopyToDataTable()
として試してみたのですが、
『AsEnumerableは、System.Data.DataTableのメンバーではありません』
というエラーが発生してしまいます。

「かんたんDataTableアクティビティ」も使ってみたのですが、
SortKeyに、 “キー1 Asc, キー2 Asc”
を指定したのですが、これもエラーになりました。

何れかの方法で、ソートできれば良いのですが、修正箇所をアドバイス頂けないでしょうか。
よろしくお願いします。

こんにちは

『AsEnumerableは、System.Data.DataTableのメンバーではありません』
というエラーが発生してしまいます。

このエラーはしばしば発生します。解消方法は以下参照ください。

あるいは新規にxamlファイルを追加してみると、そちらでは使えたりしますので、そちらを試してみる手もあります。

これはどのようなエラーになりましたか?

作者としては気になる情報です。詳細をお聞かせいただけませんか?

あと、汚い方法ですが、キー1とキー2をタブで連結し、1列にまとめて、それをキーとしてソートしてあげるとか。。。

ここを DT.AsEnumerable.~ (()を抜く)に変更してみて試していただけますか?

ソートするのには以下の方法もあります。

DT.Select("",“キー1,キー2”).CopyToDataTable

※LINQより見やすく、文字数も少ないので簡単なものはこちらを主に使っています。

以上、ご参考まで。

※ここから脱線します。
selectはlinqより遅いという話があったので測定してみました。

※比較にはこれを使いました。
DT.AsEnumerable().OrderBy(function(x) x(“キー1”).ToString()).ThenBy(function(y) y(“キー2”).ToString()).CopyToDataTable()

デバッグ時はselectの方が遅かったのですが、パブリッシュ後は同じぐらいでした。

データ量1万件 select:40ms linq:48ms
データ量10万件 select:550ms linq:529.5ms
データ量100万件 select:6162ms linq:6764ms
※数回の平均です。

※パブリッシュ時に最適化でもかかっているのでしょうか。。。

1 Like

はなっち様
プロパティの設定がそもそも間違っているのかもしれませんので、
ご教示頂けるとありがたいです。
“列B△D,列A△ACS” となっていたので、
“キー1 Asc, キー2 Asc”
と設定したのですが、ソートされていませんでした。
また、出力パネルに下記のように、出力されていました。
Resultにも、"False"が返ってきています。

Error

よろしくお願い致します。

パラメタで、"国語 D,名前 A"に指定して実行したところ、ソートされました。
更に、"国△語 D,名前 A"と指定したところ、結果がFalseでした。

指定の列名が正しいか、「列情報のみをログ出力」などで確認してみてください。

cheez_RPA様

エラーが消えて、ソートされました!
別のプログラムで、同様に設定した際は、()ありでも大丈夫だったのですが…
また同じエラーが出たら、()の削除をやってみます。
ありがとうございました!

1 Like

Yoichi様

エラーが発生しているファイルに、追記してみたところ、
エラーが消えました。
ありがとうございます!

1 Like

kyd_has様
Selectで、ソートできました。
データ量での比較も、とても参考になりました。
ありがとうございました!

1 Like

あとはかんたんDataTableだけがダメな子だな。

ソート前のデータテーブルを出力して、列名をコピーして使ってみたのですが、
上手くいかず・・・
条件を、
“キー1 Asc キー2 Asc”
として、「,」を削除したら、ソートできました!
「,」は、使用しない方がよいでしょうか?

カスタムアクティビティのソースを見たところ、カンマは必要でした。

“キー1 Asc,キー2 Asc”
の指定はあっています。

なんでだろう。。。

他、回答者の方法で実装した方がいいですね。お手を煩わせてすみません。
もうちょっとこちらでカスタムアクビティの試験をしてみます。

そう言えば、 noir_chatさんのログの状況をみたら、○○番号の指定はしてあっても、◆のところには出てきていませんねぇ。となると、アクティビティが側では、○○番号がなかったって事になります。

HANACCHI様

私が初心者過ぎて、見よう見まねで作っている状況でして・・・
こちらこそ、お手を煩わせてしまい、申し訳ありません。

「,」を削除したときのログになります。
他の方法でソートしたときと、同様にソートすることができました。
◆には、「〇〇番号」が入っていないですね。。。

OK