2017-01-24 36 views
0

如何在DICOM數據集中添加多行?沒有使用另一個DICOM 數據集,如List<DicomDataset>如何在DICOM數據集中添加多行?

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

目前還不清楚你在問什麼。請更詳細地解釋你正在嘗試做什麼。你是否試圖將DataRow中的數據傳輸到多個DicomDataset?要麼? –

回答

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