public CremaQuery(ICremaHost cremaHost) { this.cremaHost = cremaHost; this.Name = "Query"; Field <DataBaseType>() .Name("Database") .Argument <StringGraphType>("name", "") .Argument <StringGraphType>("tags", "") .Resolve(context => { var dataBaseName = context.GetArgument <string>("name"); var tags = context.GetArgument <string>("tags"); var database = this.GetDataBase(dataBaseName); return(this.cremaHost.Dispatcher.Invoke(() => { var info = database.DataBaseInfo; if (string.IsNullOrWhiteSpace(tags)) { return database.Dispatcher.Invoke(() => DataBaseModel.ConvertFrom(database, info)); } else { info.Tags = (TagInfo)tags; info.Paths = this.GetItems(database, (TagInfo)tags).ToArray(); info.TypesHashValue = this.GetTypesHashValue(database, (TagInfo)tags); info.TablesHashValue = this.GetTablesHashValue(database, (TagInfo)tags); return DataBaseModel.ConvertFrom(database, info); } })); }); Field <ListGraphType <DataBaseType> >() .Name("Databases") .Argument <StringGraphType, string>("name", "", "*") .Argument <StringGraphType>("tags", "") .Resolve(context => { var dataBaseName = context.GetArgument <string>("name"); var tags = context.GetArgument <string>("tags"); var databases = this.GetDataBases(dataBaseName); return(this.cremaHost.Dispatcher.Invoke(() => { if (string.IsNullOrWhiteSpace(tags)) { return databases.Select(database => { return database.Dispatcher.Invoke(() => DataBaseModel.ConvertFrom(database, database.DataBaseInfo)); }).ToArray(); } return databases.Select(database => { return database.Dispatcher.Invoke(() => { var info = database.DataBaseInfo; info.Tags = (TagInfo)tags; info.Paths = this.GetItems(database, (TagInfo)tags).ToArray(); info.TypesHashValue = this.GetTypesHashValue(database, (TagInfo)tags); info.TablesHashValue = this.GetTablesHashValue(database, (TagInfo)tags); return DataBaseModel.ConvertFrom(database, info); }); }).ToArray(); })); }); }