Exemplo n.º 1
0
        private IColumn GetColumn(MemberInfo[] members)
        {
            IFieldFinder?current = (Table)this.Table;
            Field?       field   = null;

            for (int i = 0; i < members.Length - 1; i++)
            {
                if (current == null)
                {
                    throw new InvalidOperationException("{0} does not implement {1}".FormatWith(field, typeof(IFieldFinder).Name));
                }

                field = current.GetField(members[i]);

                current = field as IFieldFinder;
            }

            var lastMember = members[members.Length - 1];

            if (lastMember is Type t)
            {
                return(((FieldImplementedBy)field !).ImplementationColumns.GetOrThrow(t));
            }
            else if (current != null)
            {
                return((IColumn)current.GetField(lastMember));
            }
            else
            {
                throw new InvalidOperationException("Unexpected");
            }
        }
Exemplo n.º 2
0
        internal static Field FindField(IFieldFinder fieldFinder, MemberInfo[] members)
        {
            IFieldFinder?current = fieldFinder;
            Field?       result  = null;

            foreach (var mi in members)
            {
                if (current == null)
                {
                    throw new InvalidOperationException("{0} does not implement {1}".FormatWith(result, typeof(IFieldFinder).Name));
                }

                result = current.GetField(mi);

                current = result as IFieldFinder;
            }

            return(result !);
        }
Exemplo n.º 3
0
        internal static Field?TryFindField(IFieldFinder fieldFinder, MemberInfo[] members)
        {
            IFieldFinder?current = fieldFinder;
            Field?       result  = null;

            foreach (var mi in members)
            {
                if (current == null)
                {
                    return(null);
                }

                result = current.TryGetField(mi);

                if (result == null)
                {
                    return(null);
                }

                current = result as IFieldFinder;
            }

            return(result);
        }