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; })); }
//生成复合集合成员虚拟数据源连接。 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); }