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

时间:2017-01-24 04:02:37

标签: c# fo-dicom

如何在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());                           
  }
}

1 个答案:

答案 0 :(得分:0)

查看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());