public override void Apply(PropertyConfiguration edmProperty, StructuralTypeConfiguration structuralTypeConfiguration, Attribute attribute, ODataConventionModelBuilder model) { if (edmProperty == null) { throw Error.ArgumentNull("edmProperty"); } if (!edmProperty.AddedExplicitly) { SelectAttribute selectAttribute = attribute as SelectAttribute; ModelBoundQuerySettings querySettings = edmProperty.QueryConfiguration.GetModelBoundQuerySettingsOrDefault(); if (querySettings.SelectConfigurations.Count == 0) { querySettings.CopySelectConfigurations(selectAttribute.SelectConfigurations); } else { foreach (var property in selectAttribute.SelectConfigurations.Keys) { querySettings.SelectConfigurations[property] = selectAttribute.SelectConfigurations[property]; } } if (selectAttribute.SelectConfigurations.Count == 0) { querySettings.DefaultSelectType = selectAttribute.DefaultSelectType; } } }
private static ModelBoundQuerySettings GetMergedPropertyQuerySettings( ModelBoundQuerySettings propertyQuerySettings, ModelBoundQuerySettings propertyTypeQuerySettings) { ModelBoundQuerySettings mergedQuerySettings = new ModelBoundQuerySettings(propertyQuerySettings); if (propertyTypeQuerySettings != null) { if (!mergedQuerySettings.PageSize.HasValue) { mergedQuerySettings.PageSize = propertyTypeQuerySettings.PageSize; } if (mergedQuerySettings.MaxTop == 0 && propertyTypeQuerySettings.MaxTop != 0) { mergedQuerySettings.MaxTop = propertyTypeQuerySettings.MaxTop; } if (!mergedQuerySettings.Countable.HasValue) { mergedQuerySettings.Countable = propertyTypeQuerySettings.Countable; } if (mergedQuerySettings.OrderByConfigurations.Count == 0 && !mergedQuerySettings.DefaultEnableOrderBy.HasValue) { mergedQuerySettings.CopyOrderByConfigurations(propertyTypeQuerySettings.OrderByConfigurations); mergedQuerySettings.DefaultEnableOrderBy = propertyTypeQuerySettings.DefaultEnableOrderBy; } if (mergedQuerySettings.FilterConfigurations.Count == 0 && !mergedQuerySettings.DefaultEnableFilter.HasValue) { mergedQuerySettings.CopyFilterConfigurations(propertyTypeQuerySettings.FilterConfigurations); mergedQuerySettings.DefaultEnableFilter = propertyTypeQuerySettings.DefaultEnableFilter; } if (mergedQuerySettings.SelectConfigurations.Count == 0 && !mergedQuerySettings.DefaultSelectType.HasValue) { mergedQuerySettings.CopySelectConfigurations(propertyTypeQuerySettings.SelectConfigurations); mergedQuerySettings.DefaultSelectType = propertyTypeQuerySettings.DefaultSelectType; } if (mergedQuerySettings.ExpandConfigurations.Count == 0 && !mergedQuerySettings.DefaultExpandType.HasValue) { mergedQuerySettings.CopyExpandConfigurations( propertyTypeQuerySettings.ExpandConfigurations); mergedQuerySettings.DefaultExpandType = propertyTypeQuerySettings.DefaultExpandType; mergedQuerySettings.DefaultMaxDepth = propertyTypeQuerySettings.DefaultMaxDepth; } } return(mergedQuerySettings); }