私のデータテーブルを考えてみてください
Id Name MobNo
1 ac 9566643707
2 bc 9944556612
3 cc 9566643707
LINQを使用せずにc#で3
重複する列値を含む行を削除する方法。MobNo
SOについても同様の質問を見てきましたが、すべての回答でLINQが使用されています。
私のデータテーブルを考えてみてください
Id Name MobNo
1 ac 9566643707
2 bc 9944556612
3 cc 9566643707
LINQを使用せずにc#で3
重複する列値を含む行を削除する方法。MobNo
SOについても同様の質問を見てきましたが、すべての回答でLINQが使用されています。
次の方法は私が望むことをしました....
public DataTable RemoveDuplicateRows(DataTable dTable, string colName)
{
Hashtable hTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
//Add list of all the unique item value to hashtable, which stores combination of key, value pair.
//And add duplicate item value in arraylist.
foreach (DataRow drow in dTable.Rows)
{
if (hTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hTable.Add(drow[colName], string.Empty);
}
//Removing a list of duplicate items from datatable.
foreach (DataRow dRow in duplicateList)
dTable.Rows.Remove(dRow);
//Datatable which contains unique records will be return as output.
return dTable;
}
CSVファイルを読んでいるとき(少し擬似コードですが、画像が表示されます):
List<String> uniqueMobiles = new List<String>();
String[] fileLines = readYourFile();
for (String line in fileLines) {
DataRow row = parseLine(line);
if (uniqueMobiles.Contains(row["MobNum"])
{
continue;
}
uniqueMobiles.Add(row["MobNum"]);
yourDataTable.Rows.Add(row);
}
これにより、一意の携帯電話を含むレコードのみがデータテーブルに読み込まれます。
これが最も簡単な方法です。
****
var uniqueContacts = dt.AsEnumerable()
.GroupBy(x=>x.Field<string>("Email"))
.Select(g=>g.First());
**このスレッド LINQで、特定の行の値に基づいてデータテーブルから重複する行を削除することがわかりました
私がデータテーブルとして返すのは実際には何でしたか
DataTable uniqueContacts = dt.AsEnumerable()
.GroupBy(x=>x.Field<string>("Email"))
.Select(g=>g.First()).CopyToDataTable();
シャープなDBでこれを実行する前にDISTINCTの内部動作を調べたいと思うかもしれませんが(必ずバックアップしてください!)、私が思うように動作する場合(最初の値を取得する)、使用できるはずです(何か次のSQLと非常によく似ています。
DELETE FROM YourTable WHERE Id NOT IN (SELECT DISTINCT Id, MobNo FROM YourTable);
C#では「IEqualityComparer」を使用できます