特定の値が含まれているデータ行の抽出について

表題の件について、教えていただきたいです。

データテーブルの中で列名に「コード」が含まれている列から「Z」が入力されているデータ行のみ除外したいです。

ヘッダー名を指定して繰り返し処理を行うことも可能ですが、書いてある列がバラバラな上にコードの連番が多くデータ量によっては時間がかかってしまうため、できればLINQで実装できないかと考えています。

以下の画像を例にすると、3行目と4行目が対象になります。
image

よろしくお願いします。

@toran

can you share the expected output ?

Thank you.
For example, with an image, there is a datatable with 3 records, but I want to extract only the data row of the first record that doesn’t contain “Z” using LINQ.

Hey @toran

Use Below mentioned LinQ:

(
dt_Input = (
From Row In dt_Input
Where Row.ItemArray.All(Function(x) Not x.ToString.Trim.ToLower.Equals("z"))
Select Row
	).CopyToDatatable

Above LinQ will give output that doesn’t contains “Z” in the row.

Or This one:

dt_Input = (
From Row In dt_Input
Where Not (Row.ItemArray.Any(Function(x) x.ToString.Trim.ToLower.Equals("z")))
Select Row
	).CopyToDatatable

You can use any of the above LinQ.

Hope it helps, If you have any query then let me know!

Regards,
Ajay Mishra

こんにちは
chatGPTに教えてもらいました、 Ajay_Mishraさんのと少し違うので、ご参考まで
20240418_1_linq.zip (4.0 KB)

こんにちは。

DataTableをdt
DataRowをdrとします。

ForEachRowアクティビティで下記の代入文を回します。

dr=dt.Rows(int_TransactionNumber)

でDataTableからDataRowを抽出して、

str=String.Join(String.Empty,dr.ItemArray.Select(Function(c) c.ToString)))

で、DataRowに含まれる文字列を文字列結合してstrに取得します。

正規表現でstrに"Z"が含まれていれば、該当するint_TransactionNumberの行をdtの行から削除するアイデアはいかがでしょうか。

こんにちは

列名に「コード」が含まれていない列もあるということでしょうか?
そうであれば以下動作すると思います。

dt = dt.AsEnumerable.Where(Function(r) not dt.Columns.Cast(Of DataColumn).Select(Function(dc) dc.ColumnName).Where(Function(s) s.Contains("コード")).Any(Function(s) r(s).ToString="Z")).CopyToDataTable()

なおDataTableが空になる可能性がある場合は、一旦DataRow配列で受けて内容をチェックするようにしてください。

Thank you Response:)

I’m sorry, I missed a requirement. There are columns that do not contain “コード”, and if “Z” is included in those columns, it seems they are being excluded as well.

ご回答ありがとうございます!

動作はしましたが、言語をVBで作成しているので使うのは難しそうです…。
今後C#で開発するときの参考にさせていただきます。

ご回答ありがとうございます!

お伝えしていなくて申し訳ないですが、列名に「コード」が含まれていない列も存在していて、そちらにZが記載されていると除外対象となってしまうようでした。

ご回答ありがとうございます!

DataTableを一度DataColumnに変換してから、列名に「コード」が含まれる列の値を参照してるんですね。
こちらのコードで動作しましたので使わせていただきます!

こんにちは
Yoichi様の解答が模範だと思いますが参考までに、Copilotに教えてもらったVBを添付します
代入の右辺にC#のLINQを貼付けエラーになったので、式エディター一番下
自然言語で式を記述します…欄に
「エラーを解決して」と入力して送信したらVBに書き換わりました
(添付ファイルを解凍後のCsharpToVB.xlsx参照)
間違って通報押してしまったようです、失礼しました

2024年4月19日(金) 11:28 toran via UiPath Community Forum <notifications@uipath.discoursemail.com>:

20240419_1.zip (123 KB)

参考ですが、これですと結果が逆ですね。Zがあるものを除外することが要件ですので。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.