найдите значение списка в datatable и обновите его в столбце datatable и других

#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. Я внес некоторые правки