Beispiel #1
0
        private DbExpression CreateMemberExpression(TranslationContext context, PropertyInfo property, DbExpression subaccess)
        {
            Type type = property.PropertyType;

            return(subaccess.GetOrSetChildren(property, () =>
            {
                DbExpression item = null;
                if (type.IsPrimary())
                {
                    item = new DbMemberExpression(property, subaccess);
                }
                else if (type.IsComplexCollection())
                {
                    item = new DbCollectionMemberExpression(context, property, subaccess);
                }
                else
                {
                    item = new DbObjectMemberExpression(context, property, subaccess);
                }
                return item;
            }));
        }
Beispiel #2
0
        //生成复合集合成员虚拟数据源连接。
        private ISourceFragment GenerateVirtualCompositeJoinForCollectionMember(GenerateContext context, DbCollectionMemberExpression content, SelectFragment body, bool iscomposite)
        {
            var relation = CreateSource(context, content.RelationSet);

            body.AddSource(relation);
            relation.Join = EJoinType.InnerJoin;
            var pairs = iscomposite ? content.CompositePairs : content.Pairs;

            relation.Condition = pairs.Select(a => body.CreateExpression(a)).Merge();
            return(relation);
        }