internal QuerySpec CreateQuerySpec(FilterSpec filter, ScalarSpec scalarSpec = null, int? skip = null, int? take = null, SortOrderSpec sortSpec = null) { if (DataProvider.SupportsQueryTranslation()) return DataProvider.CreateQuerySpec(filter, scalarSpec, sortSpec, skip, take, Schema); var querySpec = new QuerySpec(new CodeQuerySpec(), null); var codeQuerySpec = (CodeQuerySpec) querySpec.Code; if (filter != null) foreach (var expression in filter.Expressions) codeQuerySpec.AddFilter(Schema, expression); if (sortSpec != null) foreach (var expression in sortSpec.Expressions) codeQuerySpec.AddSort(Schema, expression.Expression, expression.SortOrder); if (scalarSpec != null) codeQuerySpec.AddScalar(Schema, scalarSpec.Expression); codeQuerySpec.Skip = skip; codeQuerySpec.Take = take; return querySpec; }
protected internal IEnumerable<object> GetRelationObjects(QuerySpec filter, OrmSchema.Relation parentRelation, object parentObject) { var objects = from o in DataProvider.GetObjects(filter.Native,Schema) select Vx.WithLoadedRelations(Schema.UpdateObject(Activator.CreateInstance(Schema.ObjectType), o),Schema.DatasetRelations) ; if (parentRelation?.ReverseRelation != null) objects = from o in objects select parentRelation.ReverseRelation.SetField(o, parentObject); if (filter.Code != null) objects = from o in objects where filter.Code.IsFilterMatch(o) select o; return objects; }