Ejemplo n.º 1
0
        private ImportTreeItem GetFullImportTree(Type unsafeType, string rootProperty)
        {
            var type = GetTypeIfArray(unsafeType);

            var importItems = type.GetProperties()
                              .Select(d => GetFullImportTree(d.PropertyType, d.Name)).ToList();
            var ret = new ImportTreeItem(
                GetTable(type),
                rootProperty,
                unsafeType.IsArray,
                type.IsNodeBase(),
                importItems
                );

            return(ret);
        }
Ejemplo n.º 2
0
 private ReqlExpr GetItem(ReqlExpr item, ImportTreeItem importItem)
 {
     // Get array of items from other table by key
     if (importItem.IsArray && importItem.NodeBase)
     {
         return(importItem.Table.GetAll(R.Args(
                                            item.G(importItem.PropertyName)
                                            .Filter(key => key != null))));
     }
     // Get single item from other table by key
     if (importItem.NodeBase)
     {
         return(importItem.Table.Get(item.G(importItem.PropertyName)).Default_((object)null));
     }
     // Return raw property (array or object)
     return(item.G(importItem.PropertyName));
 }
Ejemplo n.º 3
0
        private ImportTreeItem GetImportTree(Type unsafeType, MapObject hashMap, string rootProperty)
        {
            var type = GetTypeIfArray(unsafeType);

            var properties = hashMap.Select(d =>
            {
                var property = type.GetProperty(d.Key.ToString());
                return(new { Property = property, HashMap = d.Value as MapObject });
            }).Where(d => d.HashMap != null).ToList();
            var importItems = properties
                              .Select(d => GetImportTree(d.Property.PropertyType, d.HashMap, d.Property.Name)).ToList();
            var ret = new ImportTreeItem(
                GetTable(type),
                rootProperty,
                unsafeType.IsArray,
                type.IsNodeBase(),
                importItems
                );

            return(ret);
        }
Ejemplo n.º 4
0
        private ReqlExpr Merge(ReqlExpr expr, ImportTreeItem importTree)
        {
            var ret = expr;

            foreach (var importItem in importTree.ImportItems)
            {
                if (importItem.IsArray)
                {
                    ret = ret.Merge(item => R.HashMap(importItem.PropertyName,
                                                      GetItem(item, importItem)
                                                      .Map(subItem => Merge(subItem, importItem))
                                                      .CoerceTo("ARRAY")));
                }
                else
                {
                    ret = ret.Merge(item => R.HashMap(importItem.PropertyName,
                                                      Merge(GetItem(item, importItem), importItem)));
                }
            }

            return(ret);
        }