Example #1
0
        private void FindProperty(ReadOnlyCollection <Expression> ctorArguments)
        {
            for (int i = 0; i < ctorArguments.Count; i++)
            {
                var propertyExpression = ctorArguments[i] as MemberExpression;
                if (propertyExpression == null)
                {
                    var newExpression = ctorArguments[i] as NewExpression;
                    if (newExpression == null)
                    {
                        continue;
                    }

                    _expressions.Add(newExpression);
                    VisitNew(newExpression);
                    if (_foundProperty != null)
                    {
                        return;
                    }
                    _expressions.RemoveAt(_expressions.Count - 1);
                }
                else if (String.Compare(propertyExpression.Member.Name, _edmProperty.Name, StringComparison.OrdinalIgnoreCase) == 0 &&
                         String.Compare(propertyExpression.Member.DeclaringType.FullName, _edmProperty.DeclaringType.FullTypeName(), StringComparison.OrdinalIgnoreCase) == 0)
                {
                    _foundProperty = _expressions[_expressions.Count - 1].Type.GetProperties()[i];
                    return;
                }
                else
                {
                    var tupleVisitor = new OePropertyTranslator(_source);
                    propertyExpression = tupleVisitor.CreatePropertyExpression(propertyExpression, _edmProperty);
                    if (propertyExpression != null)
                    {
                        _foundProperty = (PropertyInfo)propertyExpression.Member;
                        _expressions.AddRange(tupleVisitor._expressions);
                        return;
                    }
                }
            }
        }