如何在 DICOM 数据集中添加多行?

How can i add multiple rows in DICOM dataset?

如何在 DICOM 数据集中添加多行?不使用另一个 DICOM 像 List<DicomDataset>?

这样的数据集
dt = dac.ExecuteDataSet(dbCommand).Tables[0];
if (dt.Rows.Count > 0)
{
  foreach (DataRow dr in dt.Rows)
  {
    DicomDataset _dataset = new DicomDataset();
    _dataset.Add(DicomTag.SOPClassUID, SOPClassUID);
    _dataset.Add(DicomTag.SOPInstanceUID, GenerateUid());

    _dataset.Add(DicomTag.PatientID, dr["PatientID"].ToString());
    _dataset.Add(DicomTag.PatientName, dr["PatientName"].ToString());
    _dataset.Add(DicomTag.PatientBirthDate, dr["DOB"].ToString());
    _dataset.Add(DicomTag.PatientSex, dr["Sex"].ToString());

    _dataset.Add(DicomTag.AccessionNumber, dr["AccessionNumber"].ToString());
    _dataset.Add(DicomTag.RequestedProcedureDescription, dr["Procedure_Description"].
        ToString());
    _dataset.Add(DicomTag.RequestedProcedureID, dr["RequestedProcedureId"].ToString());
    _dataset.Add(DicomTag.Modality, dr["modality"].ToString());                           
  }
}

查看DicomDataset的内部结构我们可以看到,当你添加多个项目时,会调用以下方法

public DicomDataset Add<T>(DicomTag tag, params T[] values)
{
    return DoAdd(tag, values, false);
}

private DicomDataset DoAdd<T>(DicomTag tag, IList<T> values, bool allowUpdate)
{
    [...]
    return DoAdd(vr, tag, values, allowUpdate);
}

最终会导致这样的调用

if (typeof(T) == typeof(string)) 
    return DoAdd(new DicomApplicationEntity(tag, values.Cast<string>().ToArray()), allowUpdate);

这会将 DicomApplicationEntity 对象与您传递的数组相加。无论如何,当您尝试添加具有相同标签的多个对象时,它将失败,因为内部字典只能容纳每种类型的一个对象。因此我想,您可以使用

为一个标签添加多行
_dataset.Add(DicomTag.PatientID, dt.Rows.OfType<DataRow>().Select(row => row["PatientID"].ToString()).ToArray());