public virtual void ReadData(string tableName, string columnName, object value) { var column = SchemaProvider.GetColumn(tableName, columnName); var dicomTags = column.Tags; if (column.IsKey) { CurrentData.KeyValue = value.ToString( ); } if (column.IsForeign) { string keyString = value.ToString( ); KeyToDataSetCollection resultSet = null; if (ResultSets.TryGetValue(column.Table.Parent, out resultSet)) { fo.DicomDataset foreignDs = (fo.DicomDataset)resultSet[keyString]; if (QueryLevelTableName == column.Table.Name) { foreignDs.Merge(CurrentData.CurrentDs); //resultSet[keyString] = CurrentData.CurrentDs ; } else { if (column.Table.IsSequence) { fo.DicomSequence sq = (fo.DicomSequence)CurrentData.ForeignDs.Get <fo.DicomSequence> (CurrentData.ForeignTagValue); fo.DicomDataset item = new fo.DicomDataset( ); sq.Items.Add(item); CurrentData.CurrentDs.Merge(item); CurrentData.CurrentDs = item; } else if (column.Table.IsMultiValue) { CurrentData.CurrentDs = foreignDs; } else { CurrentData.CurrentDs.Merge(foreignDs); foreignDs.CopyTo(CurrentData.CurrentDs); //TODO: check if above merge is still necessary with this new CopyTo method } } } } if (null == dicomTags) { return; } ReadTags(columnName, value, dicomTags); }