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