12

私のプロジェクトには2つのデータテーブルがdtFailありますdtFaileddtFailed列名の宣言しかありません)。dtFail「EmployeeName」列の値が重複しています。だから私はデータビューを取りdvFail、以下のコードに示すようにそれらを区別するためのプロセスを実行しました:

dtFail

ここに画像の説明を入力してください

私は以下のコードを試しました:

   DataView dvFail = new DataView(dtFail);
   dtFail = dvFail.ToTable(true, "EmployeeName"); //showing only one column in dtFail

dtFailed1列のみ

ここに画像の説明を入力してください

私が以下が好きなら

   DataView dvFail = new DataView(dtFail);
   dtFail = dvFail.ToTable(true, "EmployeeName","EmployeeRole","Status");

dtFailed表示されていますが行が重複しています

ここに画像の説明を入力してください

次に、データテーブルdtFailedは重複した「EmployeeName」も保存しています。

よろしくお願い
します。

4

3 に答える 3

7

このクエリを試してください-

DataTable distinctTable = originalTable.DefaultView.ToTable( /*distinct*/ true);

詳細については、以下のリンクをクリックしてください-

https://social.msdn.microsoft.com/Forums/en-US/ed9c6a6a-a93e-4bf5-a892-d8471b84aa3b/distinct-in-datatable-or-dataview?forum=adodotnetdataset

これがお役に立てば幸いです。

于 2015-06-29T11:01:47.150 に答える
1

解決策 1:

私の理解の質問に基づいて、EmployeeName に基づいて重複を考慮する必要があり、他の列について心配する必要はありません。その場合、以下の解決策がうまく機能します。

foreach(DataRow r in dtFail.AsEnumerable())
  {
   if (!dt1.AsEnumerable().Any(r1 => r1["EmployeeName"] == r["EmployeeName"]))
      {
     // if you don't want to copy entire row create new DataRow 
     // with required fields and add that row.
      dt1.Rows.Add(r.ItemArray);
      }
  }

必要に応じて、dt1 を dtFail に戻すことができます。

解決策 2:

個別の行を考慮する必要がある場合は、以下のソリューションを好みます。

var temp = dtFail.AsEnumerable().Distinct();
dtFail = temp.CopyToDataTable();
于 2015-07-03T14:22:09.487 に答える