Esempio n. 1
0
 protected Func <TableEntityRow, object> Get_GetProjectedValue_Computation(IRequestedBinding requestedBinding)
 {
     if (requestedBinding is QueryBinding)
     {
         var originalQueryType = projectedType.Fields.First(kvp => kvp.Key.Name == "Field0").Value;
         var valueGetter       = Get_GetProjectedValue_Computation(originalQueryType, (requestedBinding as QueryBinding).Value);
         return(source => valueGetter(source.Values[0]));
     }
     //Then its an include binding
     else
     {
         var projectionIndex = projectedType.RelatedBindings.IndexOf(requestedBinding as IncludeBinding) + 1;
         return(source => source.Values[projectionIndex]);
     }
 }
Esempio n. 2
0
 private bool IsManyToManyBinding(IRequestedBinding target)
 {
     if (target is IncludeBinding)
     {
         var include          = target as IncludeBinding;
         var memberExpression = include.IncludeDirective.GetSelector().Body as MemberExpression;
         return(IsManyToMany(memberExpression.Member));
     }
     else if (target is QueryBinding)
     {
         var queryType = (target as QueryBinding).Value;
         return(queryType.NonPrimitiveEnumerableItemType != null && queryType.NonPrimitiveEnumerableItemType is ManyToManyMapType);
     }
     else
     {
         return(false);
     }
 }
Esempio n. 3
0
 public static bool MatchesTarget(this IRelatedBinding relatedBinding, IRequestedBinding target)
 {
     return relatedBinding.TargetBinding == target;
 }
Esempio n. 4
0
        private List <IncludeBinding> GetIncludeBindings(IEnumerable <QueryBinding> queryBindings)
        {
            var bindings = new List <IncludeBinding>();

            Func <MemberExpression, IncludeBinding> getExistingBinding =
                m => bindings.Find(id => ExpressionUtil.IsEquivalent(id.IncludeDirective.GetSelector().Body, m));

            Func <MemberExpression, IncludeDirective> getIncludeDirective = m =>
            {
                var member = m.GetDepth() == 1 ? m :
                             Expression.MakeMemberAccess(Expression.Parameter(m.Expression.Type, m.Expression.Type.Name.Substring(0, 1).ToLower()), m.Member);
                return(IncludeDirectiveUtil.GetIncludeDirective(member));
            };

            foreach (var qb in queryBindings)
            {
                //Allowing not included collections to be used for collection includes
                foreach (var include in qb.Value.Includes)//.Where(inc => !(inc is IIncludeInCollectionDirective)))
                {
                    IRequestedBinding targetBinding = qb;
                    foreach (MemberExpression member in GetMembers(include.GetSelector().Body as MemberExpression))
                    {
                        var existingBinding = getExistingBinding(member);
                        if (existingBinding != null)
                        {
                            targetBinding = existingBinding;
                        }
                        else
                        {
                            var includeDirective  = getIncludeDirective(member);
                            var currentMemberName = (targetBinding is QueryBinding)
                                ? (targetBinding as QueryBinding).Value.GetMemberName(member.Member) : member.Member.Name;
                            var binding = new IncludeBinding()
                            {
                                IncludeDirective     = includeDirective,
                                TargetBinding        = targetBinding,
                                TranslatedExpression = typeTranslationUtil.GetTranslatedMemberExpression
                                                           (member.Expression.Type, currentMemberName, targetBinding.TranslatedExpression)
                            };
                            bindings.Add(binding);
                            targetBinding = binding;
                        }
                    }
                }
                foreach (var collInclude in qb.Value.Includes.Where(inc => inc is IIncludeInCollectionDirective))
                {
                    var collectionSelector = collInclude.GetSelector().Body as MemberExpression;

                    var target = getExistingBinding(collectionSelector);
                    if (target != null)
                    {
                        bindings.Add(new UnprojectedIncludeInCollectionBinding
                        {
                            IncludeDirective = collInclude,
                            TargetBinding    = target
                        });
                    }
                }
            }
            return(bindings);
        }
Esempio n. 5
0
 public static bool MatchesTarget(this IRelatedBinding relatedBinding, IRequestedBinding target)
 {
     return(relatedBinding.TargetBinding == target);
 }