別のデータテーブルに存在するデータテーブルから行を削除します

アニッシュ

DataSetに列C1(PK)、C2、およびC3(一意の値)を持つDataTable dt1があり、いくつかの行を削除した後、AcceptChangesを実行します。dtAと構造が同じである別のDataTabledt2があります。C3(一意の値)で比較したdtBに存在するdtAの行を削除し、AcceptChangesを実行したいと思います。

私は非常に近いことを達成することができましたが、以下のようなことを除いて(ここから学んだ私が望むことはできませんでした

var a = dt1.AsEnumerable().Select(r => r.Field<Guid>("C3"));
var b = dt2.AsEnumerable().Select(r => r.Field<Guid>("C3"));
var c = a.Except(b);

このアプローチの問題は、C3列に属する値のリストのみを取得していることです。ここ示すようさらにいくつかのことを行うことができますが、新しいDataTableが作成され、既存のdt1テーブルは変更しません。

私が考えた2番目のアプローチは、次のようなことをすることでした。

foreach (DataRow r1 in ds1.Tables[0].Rows)
{
    foreach(DataRow r2 in dt2.Rows)
    {
        if (r1.Field<Guid>("Guid1") == r2.Field<Guid>("Guid2"))
        {
            r1.Delete();
        }
    }
}

ここで、行が削除されるとすぐに、「この行はテーブルから削除され、データがありません」というエラーが表示されます。ここで何が欠けていますか?

私はまた、これを行うためのより良い方法があるかもしれないと感じています、ただ笑を知りません。

セルゲイ・ベレゾフスキー

「この行はテーブルから削除され、データがありません」というエラーが表示されます。ここで何が欠落していますか?

外側と内側の2つのループがあります。そして、ここには2つの問題があります。1つ目は、一致が見つかったときに行を削除することです。内部ループの次の反復で、削除された行の値を取得しようとしていますが、これにより例外がスローされます。ただし、行を削除した後に内部ループを中断したとしても、別の問題が発生します。列挙している行の変更です。したがって、コードは次のようになります。

foreach (DataRow r1 in dt1.Rows.Cast<DataRow>().ToArray()) // save rows to array
{
    foreach (DataRow r2 in dt2.Rows)
    {
        if (r1.Field<Guid>("C3") == r2.Field<Guid>("C3"))
        {
            r1.Delete();
            break; // break inner loop
        }
    }
}

しかし、私はLINQアプローチを使用します-idフィールドの行を結合して削除する行を取得し、テーブルから削除します。

var rowsToDelete = from r1 in dt1.AsEnumerable()
                   join r2 in dt2.AsEnumerable()
                        on r1.Field<Guid>("C3") equals r2.Field<Guid>("C3")
                   select r1;

foreach(DataRow row in rowsToDelete.ToArray())
   row.Delete(); // marks row as deleted;

注:Delete既存のDataRowでメソッドを使用すると、そのRowStateはDeletedになります。を呼び出すまで行は削除されたままになりAcceptChangesます。これにより、テーブルから行が削除されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

データがまだ存在しない場合にのみ、あるテーブルから別のテーブルにデータを挿入します

分類Dev

Laravelは、あるテーブルから別のテーブルにデータを移動し、データの元の列を削除しますか?

分類Dev

テーブル内に他のデータが存在する場合は、条件に基づいてテーブルから行を削除します

分類Dev

cron phpは、あるSQLテーブルを別のSQLテーブルから更新/挿入し、古いテーブルからデータを削除します

分類Dev

別のテーブルのデータに基づいて、データテーブルからテーブルにデータを挿入します

分類Dev

MySQLはあるテーブルから別のテーブルにデータを追加します

分類Dev

IDが別のテーブルに存在する場合は、テーブルデータを更新します

分類Dev

データが別のテーブルに存在する場合はテーブルを更新します

分類Dev

クラス内に存在するテーブル内のテーブルデータを識別します

分類Dev

DBにすでに存在する場合は、Tempテーブルからデータを削除します

分類Dev

データテーブルから既存の行を削除します

分類Dev

データテーブルから特定の行を削除します

分類Dev

データのコピーアクティビティを実行する前に、宛先テーブルからデータを削除します

分類Dev

テーブルからデータを取得する、別のテーブルに存在する場合は、そこからデータを取得する

分類Dev

あるテーブルから別のテーブルにデータをコピーするためのクエリを実行します

分類Dev

linqを使用して、Webサービスに存在するデータテーブルから個別のデータを取得します

分類Dev

別のテーブルのデータを使用してテーブルからデータを選択する

分類Dev

データテーブルから行を削除する方法

分類Dev

C#の別のSQLテーブルからSQLテーブルにデータ行を挿入する

分類Dev

別のテーブルのデータに基づいてテーブルから行を選択する

分類Dev

あるデータテーブルから別のデータテーブルに列を追加する

分類Dev

データテーブルから、共通の列ヘッダーがある別のテーブルに行をコピーします

分類Dev

データベース内の1つのテーブルから、異なる列を持つ別のテーブルに特定の行を挿入します

分類Dev

2つのテーブルからデータを取得し、別のテーブルに挿入します

分類Dev

IDなしでテーブルから別のテーブルにデータをコピーする

分類Dev

動的テーブルがデータベースに存在する場合テーブルを削除します

分類Dev

トリガーで削除した後に別のテーブルからデータを挿入する方法

分類Dev

テーブルに新しい行を挿入しますが、テーブルの別の行からデータをコピーします

分類Dev

Excelvbaでテーブルから別のテーブルにデータを動的に移動します

Related 関連記事

  1. 1

    データがまだ存在しない場合にのみ、あるテーブルから別のテーブルにデータを挿入します

  2. 2

    Laravelは、あるテーブルから別のテーブルにデータを移動し、データの元の列を削除しますか?

  3. 3

    テーブル内に他のデータが存在する場合は、条件に基づいてテーブルから行を削除します

  4. 4

    cron phpは、あるSQLテーブルを別のSQLテーブルから更新/挿入し、古いテーブルからデータを削除します

  5. 5

    別のテーブルのデータに基づいて、データテーブルからテーブルにデータを挿入します

  6. 6

    MySQLはあるテーブルから別のテーブルにデータを追加します

  7. 7

    IDが別のテーブルに存在する場合は、テーブルデータを更新します

  8. 8

    データが別のテーブルに存在する場合はテーブルを更新します

  9. 9

    クラス内に存在するテーブル内のテーブルデータを識別します

  10. 10

    DBにすでに存在する場合は、Tempテーブルからデータを削除します

  11. 11

    データテーブルから既存の行を削除します

  12. 12

    データテーブルから特定の行を削除します

  13. 13

    データのコピーアクティビティを実行する前に、宛先テーブルからデータを削除します

  14. 14

    テーブルからデータを取得する、別のテーブルに存在する場合は、そこからデータを取得する

  15. 15

    あるテーブルから別のテーブルにデータをコピーするためのクエリを実行します

  16. 16

    linqを使用して、Webサービスに存在するデータテーブルから個別のデータを取得します

  17. 17

    別のテーブルのデータを使用してテーブルからデータを選択する

  18. 18

    データテーブルから行を削除する方法

  19. 19

    C#の別のSQLテーブルからSQLテーブルにデータ行を挿入する

  20. 20

    別のテーブルのデータに基づいてテーブルから行を選択する

  21. 21

    あるデータテーブルから別のデータテーブルに列を追加する

  22. 22

    データテーブルから、共通の列ヘッダーがある別のテーブルに行をコピーします

  23. 23

    データベース内の1つのテーブルから、異なる列を持つ別のテーブルに特定の行を挿入します

  24. 24

    2つのテーブルからデータを取得し、別のテーブルに挿入します

  25. 25

    IDなしでテーブルから別のテーブルにデータをコピーする

  26. 26

    動的テーブルがデータベースに存在する場合テーブルを削除します

  27. 27

    トリガーで削除した後に別のテーブルからデータを挿入する方法

  28. 28

    テーブルに新しい行を挿入しますが、テーブルの別の行からデータをコピーします

  29. 29

    Excelvbaでテーブルから別のテーブルにデータを動的に移動します

ホットタグ

アーカイブ