public TableIndex AddIndex(ITable table, Field[] fields) { var index = new TableIndex(table, TableIndex.GetColumnsFromFields(fields)); AddIndex(index); return(index); }
static IColumn[] GetColumns(IFieldFinder finder, LambdaExpression field) { var body = field.Body; Type?type = RemoveCasting(ref body); body = IndexWhereExpressionVisitor.RemoveLiteEntity(body); var members = Reflector.GetMemberListBase(body); if (members.Any(a => ignoreMembers.Contains(a.Name))) { members = members.Where(a => !ignoreMembers.Contains(a.Name)).ToArray(); } Field f = Schema.FindField(finder, members); if (type != null) { var ib = f as FieldImplementedBy; if (ib == null) { throw new InvalidOperationException("Casting only supported for {0}".FormatWith(typeof(FieldImplementedBy).Name)); } return((from ic in ib.ImplementationColumns where type.IsAssignableFrom(ic.Key) select(IColumn) ic.Value).ToArray()); } return(TableIndex.GetColumnsFromFields(f)); }