private void RebuildIndex() { var pkColumn = GetColumn(_icolPk); if (pkColumn == null) { _pkIndex = null; return; } var dictionary = new Dictionary <object, int>(pkColumn.RowCount); for (int i = 0; i < pkColumn.RowCount; i++) { var value = pkColumn.GetValue(i); if (null == value) { throw CommonException.Create(ListExceptionDetail.NullValue(ListName, ListDef.IdProperty)); } try { dictionary.Add(pkColumn.GetValue(i), i); } catch (Exception e) { throw CommonException.Create(ListExceptionDetail.DuplicateValue(ListName, ListDef.IdProperty, value), e); } } _pkIndex = dictionary; }
private int EnsureFindColumnIndex(string columnName) { if (string.IsNullOrEmpty(columnName)) { return(-1); } int icol = FindColumnIndex(columnName); if (icol < 0) { throw CommonException.Create(ListExceptionDetail.ColumnNotFound(ListName, columnName)); } return(icol); }
public ListData ChangeListDef(ListDef newListDef, IDictionary <string, string> originalColumnNames) { if (RowCount == 0 || originalColumnNames != null && originalColumnNames.Count == 0) { return(new ListData(newListDef)); } var newColumns = new List <ColumnData>(); foreach (var annotationDef in newListDef.Properties) { string originalName; if (originalColumnNames == null) { originalName = annotationDef.Name; } else { if (!originalColumnNames.TryGetValue(annotationDef.Name, out originalName)) { newColumns.Add(ColumnData.MakeColumnData(annotationDef).SetRowCount(RowCount)); continue; } } int icolOrig = FindColumnIndex(originalName); var origColumn = Columns[icolOrig]; var origAnnotationDef = ListDef.Properties[icolOrig]; if (annotationDef.ValueType == origAnnotationDef.ValueType) { newColumns.Add(origColumn); continue; } var newColumn = ColumnData.MakeColumnData(annotationDef).SetRowCount(RowCount); for (int i = 0; i < RowCount; i++) { var origValue = origColumn.GetValue(i); object newValue; if (!TryChangeType(origValue, annotationDef.ValueType, out newValue)) { throw CommonException.Create( ListExceptionDetail.InvalidValue(newListDef.Name, origAnnotationDef.Name, origValue)); } if (newValue != null) { newColumn.SetValue(i, newValue); } } newColumns.Add(newColumn); } return(new ListData(newListDef, newColumns)); }