public static IQueryable OrderByProperty(IQueryable query, IEdmModel model, IEdmProperty property, OrderByDirection direction, Type type, bool alreadyOrdered = false) { // property aliasing string propertyName = EdmLibHelpers.GetClrPropertyName(property, model); LambdaExpression orderByLambda = GetPropertyAccessLambda(type, propertyName); return(OrderBy(query, orderByLambda, direction, type, alreadyOrdered)); }
private object BuildResourceInstance() { if (EdmObject == null) { return(null); } TypedEdmStructuredObject edmStructruredObject = EdmObject as TypedEdmStructuredObject; if (edmStructruredObject != null) { return(edmStructruredObject.Instance); } SelectExpandWrapper selectExpandWrapper = EdmObject as SelectExpandWrapper; if (selectExpandWrapper != null && selectExpandWrapper.UntypedInstance != null) { return(selectExpandWrapper.UntypedInstance); } Type clrType = EdmLibHelpers.GetClrType(StructuredType, EdmModel); if (clrType == null) { throw new InvalidOperationException(Error.Format(SRResources.MappingDoesNotContainResourceType, StructuredType.FullTypeName())); } object resource = Activator.CreateInstance(clrType); foreach (IEdmStructuralProperty property in StructuredType.StructuralProperties()) { object value; if (EdmObject.TryGetPropertyValue(property.Name, out value) && value != null) { if (value is SelectExpandWrapper) { // Skip the select expand property continue; } string propertyName = EdmLibHelpers.GetClrPropertyName(property, EdmModel); if (TypeHelper.IsCollection(value.GetType())) { DeserializationHelpers.SetCollectionProperty(resource, property, value, propertyName); } else { DeserializationHelpers.SetProperty(resource, propertyName, value); } } } return(resource); }
public static IQueryable OrderByProperty(IQueryable query, IEdmModel model, IEdmProperty property, OrderByDirection direction, Type type, bool alreadyOrdered = false) { // property aliasing string propertyName = EdmLibHelpers.GetClrPropertyName(property, model); Type elementType = query.ElementType; LambdaExpression orderByLambda; if (EdmLibHelpers.IsComputeWrapper(elementType, out Type underType)) { orderByLambda = GetInstancePropertyAccessLambda(elementType, propertyName); } else { orderByLambda = GetPropertyAccessLambda(type, propertyName); } return(OrderBy(query, orderByLambda, direction, type, alreadyOrdered)); }