Esempio n. 1
0
        private Expression GetItemNameExpression(ItemNode itemNode)
        {
            Expression nameExpression;

            if (itemNode.HasFlag(NodeFlags.Source))
            {
                nameExpression = Expression.Property(Expression.Property(this.args.Source, nameof(IField.Identity)), nameof(FieldIdentity.Name));
            }
            else if (itemNode.List != null)
            {
                Expression enumerator = this.GetEnumeratorExpression(itemNode.List);
                Expression list       = this.GetFieldExpression(itemNode.List);
                Expression listName   = Expression.Property(Expression.Property(list, nameof(IField.Identity)), nameof(FieldIdentity.Name));
                Expression itemName   = Expression.Constant(itemNode.Metadata.Identity.Notation.Path(itemNode.List.Metadata.Identity.Name, itemNode.Metadata.Identity.Name));
                Expression combined   = this.GetNotationCombine(listName, itemName);
                Expression index      = Expression.Property(enumerator, nameof(IndexedEnumerator <object> .Index));
                Expression indexed    = this.GetNotationIndex(combined, index);

                nameExpression = indexed;
            }
            else
            {
                throw new InvalidOperationException();
            }

            return(nameExpression);
        }