#c#
Вопрос:
У меня есть список, который я хотел бы сравнить с моей таблицей данных. Таблица данных содержит 2 столбца, и мне нужно сравнить столбец 1 таблицы данных со списком, если есть какие-либо совпадения, мне нужно обновить таблицу данных другим столбцом той же таблицы данных с найденным номером. как я могу это сделать?
это моя таблица мне нужно обновить столбец тегов из списка найти значение в таблице данных пожалуйста, помогите
Комментарии:
1. В этом вопросе отсутствует код, который у вас до сих пор … похоже, вы хотите сделать «для каждого потока данных в таблице, если список содержит строку.некоторые столбцы, установите строку.другие столбцы, равные строке.некоторые столбцы»… ?
2. да, мне нужно обновить, сопоставив элемент списка с элементом таблицы данных, если значение найдено, затем вставьте найденное значение в ту же таблицу данных в другой столбец
Ответ №1:
Please use below code snippet to solve your problem.
List<int> lstItem = new List<int>();
lstItem.Add(1);
lstItem.Add(2);
lstItem.Add(3);
lstItem.Add(15);
lstItem.Add(4);
lstItem.Add(5);
DataTable dtItems = new DataTable();
dtItems.Columns.Add(new DataColumn("frm", typeof(int)));
dtItems.Columns.Add(new DataColumn("quality", typeof(decimal)));
dtItems.Columns.Add(new DataColumn("tag", typeof(int)));
DataRow drnNewRow = dtItems.NewRow();
drnNewRow["frm"] = 1;
drnNewRow["quality"] = 0.4;
dtItems.Rows.Add(drnNewRow);
drnNewRow = dtItems.NewRow();
drnNewRow["frm"] = 2;
drnNewRow["quality"] = 0.5;
dtItems.Rows.Add(drnNewRow);
drnNewRow = dtItems.NewRow();
drnNewRow["frm"] = 3;
drnNewRow["quality"] = 0.6;
dtItems.Rows.Add(drnNewRow);
drnNewRow = dtItems.NewRow();
drnNewRow["frm"] = 4;
drnNewRow["quality"] = 0.7;
dtItems.Rows.Add(drnNewRow);
drnNewRow = dtItems.NewRow();
drnNewRow["frm"] = 5;
drnNewRow["quality"] = 0.8;
dtItems.Rows.Add(drnNewRow);
dtItems.AcceptChanges();
foreach(var item in lstItem)
{
DataRow[] drFound= dtItems.Select("frm=" item);
if(drFound.Length>0)
{
drFound[0]["tag"]=item;
}
}
dtItems.AcceptChanges();
Output :
1- 0.4 -1
2- 0.5 -2
3- 0.6 -3
4- 0.7 -4
5- 0.8 -5
Комментарии:
1. DataRow[] drFound= объекты. Выберите(«frm=» элемент); это не работает, потому что мои данные дублируются по своей природе как в списке, так и в данных
2. Мухаммад Саджид, вы можете использовать различные, такие как представление DataView = новое представление данных(dtItems); Значения, отличающиеся от данных, = представление. Суммируемый(true, «Столбец 1», «Столбец 2» …);
Ответ №2:
Для этого лучше использовать хэш-набор, чем список. Вы можете легко преобразовать список в хэш-набор, вызвав в нем ToHashSet
Если ваша таблица является int, а ваш массив-int:
var hs = (new List{1,2,3,4,5}).ToHashSet();
foreach(DataRow ro in dataTable.Rows){
if(hs.Contains((int)ro["frm"])
ro["tag"] = ro["frm"];
}
Если ваш массив является строкой, а ваша таблица-строкой:
var hs = (new string[]{"1","2","3","4","5"}).ToHashSet();
foreach(DataRow ro in dataTable.Rows){
if(hs.Contains((string)ro["frm"])
ro["tag"] = ro["frm"];
}
Если ваша таблица представляет собой int, а массив-строку:
var hs = (new string[]{"1","2","3","4","5"}).Select(int.Parse).ToHashSet();
foreach(DataRow ro in dataTable.Rows){
if(hs.Contains((int)ro["frm"])
ro["tag"] = ro["frm"];
}
Комментарии:
1. извините, мои данные находятся в строковом массиве, и они дублируются по своей природе, а количество строк равно 20, и моя таблица данных содержит 67 записей, также дублирующихся по своей природе, пожалуйста, помогите мне разобраться в этой проблеме, я застрял в этом, это структура ссылок drive.google.com/file/d/12kPEaWrVVw_LKgvdOTMD-On30MAvSSeY/… когда я использую DataRow[] drFound= dtItems.Выберите(«frm=» элемент); он не возвращает ни одной строки, я не знаю, почему
2. Но я не говорил вам этого делать … Я сказал использовать набор хэшей и выполнять каждую строку.. Нет никакой разницы между использованием массива и списка для преобразования в хэш-набор.. только строковый бит вызывает проблему. Следует ли преобразовать его в int, зависит от того, являются ли данные в таблице int или строковыми. Если таблица является строковой, оставьте список в виде строки. Если таблица представляет собой int, преобразуйте список/массив в int, а затем поместите в hashset. Я внес некоторые правки