public static Tuple <FieldDefinition, int, IOrmLiteConverter>[] GetIndexFieldsCache(this IDataReader reader, ModelDefinition modelDefinition, IOrmLiteDialectProvider dialect) { var cache = new List <Tuple <FieldDefinition, int, IOrmLiteConverter> >(); var ignoredFields = modelDefinition.IgnoredFieldDefinitions; var remainingFieldDefs = modelDefinition.FieldDefinitionsArray .Where(x => !ignoredFields.Contains(x) && x.SetValueFn != null).ToList(); for (var i = 0; i < reader.FieldCount; i++) { var columnName = reader.GetName(i); var fieldDef = modelDefinition.GetFieldDefinition(columnName); if (fieldDef != null && !ignoredFields.Contains(fieldDef) && fieldDef.SetValueFn != null) { remainingFieldDefs.Remove(fieldDef); cache.Add(Tuple.Create(fieldDef, i, dialect.GetConverterBestMatch(fieldDef))); } } foreach (var fieldDef in remainingFieldDefs) { var index = FindColumnIndex(reader, dialect, fieldDef); if (index != NotFound) { cache.Add(Tuple.Create(fieldDef, index, dialect.GetConverterBestMatch(fieldDef))); } } return(cache.ToArray()); }
public static Tuple <FieldDefinition, int, IOrmLiteConverter>[] GetIndexFieldsCache(this IDataReader reader, ModelDefinition modelDefinition, IOrmLiteDialectProvider dialect, HashSet <string> onlyFields = null, int startPos = 0, int?endPos = null) { var cache = new List <Tuple <FieldDefinition, int, IOrmLiteConverter> >(); var ignoredFields = modelDefinition.IgnoredFieldDefinitions; var remainingFieldDefs = modelDefinition.FieldDefinitionsArray .Where(x => !ignoredFields.Contains(x) && x.SetValueFn != null).ToList(); var end = endPos.GetValueOrDefault(reader.FieldCount); for (var i = startPos; i < end; i++) { var columnName = reader.GetName(i); var fieldDef = modelDefinition.GetFieldDefinition(columnName); if (fieldDef == null) { foreach (var def in modelDefinition.FieldDefinitionsArray) { if (string.Equals(dialect.NamingStrategy.GetColumnName(def.FieldName), columnName, StringComparison.OrdinalIgnoreCase)) { fieldDef = def; break; } } } if (fieldDef != null && !ignoredFields.Contains(fieldDef) && fieldDef.SetValueFn != null) { remainingFieldDefs.Remove(fieldDef); cache.Add(Tuple.Create(fieldDef, i, dialect.GetConverterBestMatch(fieldDef))); } } if (remainingFieldDefs.Count > 0 && onlyFields == null) { var dbFieldMap = new Dictionary <string, int>(StringComparer.InvariantCultureIgnoreCase); for (var i = startPos; i < end; i++) { var fieldName = reader.GetName(i); dbFieldMap[fieldName] = i; } foreach (var fieldDef in remainingFieldDefs) { var index = FindColumnIndex(dialect, fieldDef, dbFieldMap); if (index != NotFound) { cache.Add(Tuple.Create(fieldDef, index, dialect.GetConverterBestMatch(fieldDef))); } } } return(cache.ToArray()); }