Пример #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");
            }
        }
Пример #2
0
        internal override Expression GetExpression(Alias tableAlias, QueryBinder binder, Expression id)
        {
            var implementations = ImplementationColumns.SelectDictionary(t => t, (t, ic) =>
                                                                         new EntityExpression(t, new PrimaryKeyExpression(new ColumnExpression(ic.Type.Nullify(), tableAlias, ic.Name)), null, null, null, AvoidExpandOnRetrieving));

            var result = new ImplementedByExpression(IsLite ? Lite.Extract(FieldType) : FieldType, SplitStrategy, implementations);

            if (this.IsLite)
            {
                return(binder.MakeLite(result, null));
            }
            else
            {
                return(result);
            }
        }