public P InnerJoin <RE>(string fromAttributeName, string toAttributeName, Action <IJoinedEntity <P, E, RE> > expression) where RE : Entity, new()
        {
            var relatedRecordType = new RE().LogicalName;

            var joinEntity = new JoinedEntity <P, E, RE>(JoinOperator.Inner, RecordType, fromAttributeName, relatedRecordType, toAttributeName, this);

            expression(joinEntity);
            LinkEntities.Add(joinEntity.ToLinkEntity());
            return((P)Parent);
        }
        public LinkEntity AddLink(string linkToEntityName, string linkFromAttributeName, string linkToAttributeName, JoinOperator joinOperator)
        {
            LinkEntity link = new LinkEntity(
                EntityName,
                linkToEntityName,
                linkFromAttributeName,
                linkToAttributeName,
                joinOperator);

            LinkEntities.Add(link);

            return(link);
        }
        internal string ToValueXml()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(Util.ObjectToXml(ColumnSet, "a:ColumnSet", true));
            sb.Append(Util.ObjectToXml(Criteria, "a:Criteria", true));
            sb.Append(Util.ObjectToXml(Distinct, "a:Distinct", true));
            sb.Append(Util.ObjectToXml(EntityName, "a:EntityName", true));
            sb.Append(Util.ObjectToXml(LinkEntities.ToArray(), "a:LinkEntities", true));
            sb.Append(Util.ObjectToXml(Orders.ToArray(), "a:Orders", true));
            sb.Append(Util.ObjectToXml(PageInfo, "a:PageInfo", true));
            sb.Append(Util.ObjectToXml(NoLock, "a:NoLock", true));
            sb.Append(Util.ObjectToXml(TopCount, "a:TopCount", true));
            return(sb.ToString());
        }
        internal string ToValueXml()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(Util.ObjectToXml(Columns, "a:Columns", true));
            sb.Append(Util.ObjectToXml(EntityAlias, "a:EntityAlias", true));
            sb.Append(Util.ObjectToXml(JoinOperator, "a:JoinOperator", true));
            sb.Append(Util.ObjectToXml(LinkCriteria, "a:LinkCriteria", true));
            sb.Append(Util.ObjectToXml(LinkEntities.ToArray(), "a:LinkEntities", true));
            sb.Append(Util.ObjectToXml(LinkFromAttributeName, "a:LinkFromAttributeName", true));
            sb.Append(Util.ObjectToXml(LinkFromEntityName, "a:LinkFromEntityName", true));
            sb.Append(Util.ObjectToXml(LinkToAttributeName, "a:LinkToAttributeName", true));
            sb.Append(Util.ObjectToXml(LinkToEntityName, "a:LinkToEntityName", true));
            return(sb.ToString());
        }