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