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); }
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)); }
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); }
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); }