Exemple #1
0
 public virtual string GetTableFilter(TableFilterExpression tableFilter)
 {
     var filter = tableFilter.Filter;
       var prefix = string.Empty;
       var alias = tableFilter.Table.Alias;
       if (!string.IsNullOrWhiteSpace(alias))
     prefix = GetTableAlias(alias) + ".";
       GetTableAlias(tableFilter.Table.Alias);
       foreach (var col in tableFilter.Table.TableInfo.Columns) {
     var name = "{" + col.Member.MemberName + "}";
     if (!filter.Contains(name))
       continue;
     var colRef = prefix + '"' + col.ColumnName + '"';
     filter = filter.Replace(name, colRef);
       }
       filter = "(" + filter + ")";
       return filter;
 }
        private Expression AnalyzeEntityListMember(TableExpression table, PropertyInfo property, TranslationContext context)
        {
            var propType = property.PropertyType;
            if (!propType.IsEntitySequence())
              return null;
            var modelInfo = context.DbModel.EntityApp.Model;
            var masterEntInfo = modelInfo.GetEntityInfo(table.Type);
            var entMember = masterEntInfo.GetMember(property.Name);
            Util.Check(entMember != null, "Failed to find member {0} on entity {1}.", property.Name, masterEntInfo.Name);
            Util.Check(entMember.Kind == MemberKind.EntityList, "Internal LINQ error: expected List member ({0}.{1}", masterEntInfo.Name, property.Name);
            var listInfo = entMember.ChildListInfo;
            Expression whereExpr;
            switch(listInfo.RelationType) {

              case EntityRelationType.ManyToOne:
            var childTable = CreateTable(listInfo.TargetEntity.EntityType, context);
            whereExpr = BuildListPropertyJoinExpression(childTable, table, listInfo.ParentRefMember, context);
            if (!string.IsNullOrWhiteSpace(listInfo.Filter)) {
              var filterExpr = new TableFilterExpression(childTable, listInfo.Filter);
              whereExpr = Expression.And(whereExpr, filterExpr);
            }
            context.CurrentSelect.Where.Add(whereExpr);
            return childTable;

              case EntityRelationType.ManyToMany:
            var linkTable = CreateTable(listInfo.LinkEntity.EntityType, context);
            whereExpr = BuildListPropertyJoinExpression(linkTable, table, listInfo.ParentRefMember, context);
            context.CurrentSelect.Where.Add(whereExpr);
            var targetTable = RegisterAssociation(linkTable, listInfo.OtherEntityRefMember, context);
            return targetTable;
            }
            return null; //never happens
        }