У меня есть набор данных (называемый ниже dataSet) с одной таблицей и несколькими записями в ней. Один из столбцов называется «Сообщение» и содержит сообщение об ошибке. Если какие-либо записи имеют значение в этом поле, я хочу скопировать его в набор данных об ошибках (errorDataSet ниже), а затем удалить его из исходного набора данных. Мне удалось добиться этого с помощью LINQ:
DataSet errorDataSet = dataSet.Copy();
//find all records that have a Message column value
var query = from row in errorDataSet.Tables[0].AsEnumerable()
where !String.IsNullOrEmpty(row.Field<string>("Message"))
select row;
DataSet tempErrorDataSet = errorDataSet.Clone();
foreach (var row in query)
{
tempErrorDataSet.Tables[0].Clear();
tempErrorDataSet.Tables[0].ImportRow(row);
utility.WriteError(connectorName, row["Message"].ToString(), tempErrorDataSet);
//remove the error row from the good data
dataSet.Tables[0].Rows.Remove(row);
}
В нижней строке выдается исключение, или я получаю ошибки, касающиеся изменения коллекции и т. Д. Я уверен, что в LINQ есть простой способ сделать это.
Примечание: причина, по которой у меня есть tempErrorDataSet, заключается в том, что я преобразую его в XML и передаю в сохраненный процесс - он принимает только запись за один раз в этом формате, поэтому я очищаю ее каждый раз.