示例#1
0
    public TableIndex AddIndex(ITable table, Field[] fields)
    {
        var index = new TableIndex(table, TableIndex.GetColumnsFromFields(fields));

        AddIndex(index);
        return(index);
    }
示例#2
0
    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));
    }