private static Dictionary <string, List <Schema.Column> > MapFromNames(Schema schema, IEnumerable <KeyValuePair <ColumnRole, string> > roles, bool opt = false) { Contracts.AssertValue(schema); Contracts.AssertValue(roles); var map = new Dictionary <string, List <Schema.Column> >(); foreach (var kvp in roles) { Contracts.AssertNonEmpty(kvp.Key.Value); if (string.IsNullOrEmpty(kvp.Value)) { continue; } var info = schema.GetColumnOrNull(kvp.Value); if (info.HasValue) { Add(map, kvp.Key.Value, info.Value); } else if (!opt) { throw Contracts.ExceptParam(nameof(schema), $"{kvp.Value} column '{kvp.Key.Value}' not found"); } } return(map); }
/// <summary> /// Get the value of the metadata, by metadata kind (aka column name). /// </summary> public void GetValue <TValue>(string kind, ref TValue value) { var column = Schema.GetColumnOrNull(kind); if (column == null) { throw MetadataUtils.ExceptGetMetadata(); } GetGetter <TValue>(column.Value.Index)(ref value); }
/// <summary> /// Get the value of the metadata, by metadata kind (aka column name). /// </summary> public void GetValue <TValue>(string kind, ref TValue value) { var column = Schema.GetColumnOrNull(kind); if (column == null) { throw new InvalidOperationException("Invalid call to GetMetadata"); } GetGetter <TValue>(column.Value.Index)(ref value); }
/// <summary> /// Legacy method to get the column index. /// DO NOT USE: use <see cref="Schema.GetColumnOrNull"/> instead. /// </summary> public static bool TryGetColumnIndex(this Schema schema, string name, out int col) { col = schema.GetColumnOrNull(name)?.Index ?? -1; return(col >= 0); }