private Expression[] ProcessActionInvokePostBody(IODataRequestMessage message, IEdmOperation operation) { using (var messageReader = new ODataMessageReader(message, this.GetReaderSettings())) { List <Expression> parameterValues = new List <Expression>(); var parameterReader = messageReader.CreateODataParameterReader(operation); while (parameterReader.Read()) { switch (parameterReader.State) { case ODataParameterReaderState.Value: { object clrValue = ODataObjectModelConverter.ConvertPropertyValue(parameterReader.Value); parameterValues.Add(Expression.Constant(clrValue)); break; } case ODataParameterReaderState.Collection: { ODataCollectionReader collectionReader = parameterReader.CreateCollectionReader(); object clrValue = ODataObjectModelConverter.ConvertPropertyValue(ODataObjectModelConverter.ReadCollectionParameterValue(collectionReader)); parameterValues.Add(Expression.Constant(clrValue, clrValue.GetType())); break; } case ODataParameterReaderState.Resource: { var entryReader = parameterReader.CreateResourceReader(); object clrValue = ODataObjectModelConverter.ReadEntityOrEntityCollection(entryReader, false); parameterValues.Add(Expression.Constant(clrValue, clrValue.GetType())); break; } case ODataParameterReaderState.ResourceSet: { var feedReader = parameterReader.CreateResourceSetReader(); var collectionList = ODataObjectModelConverter.ReadEntityOrEntityCollection(feedReader, true); parameterValues.Add(Expression.Constant(collectionList, collectionList.GetType())); break; } } } return(parameterValues.ToArray()); } }
private Expression[] ProcessActionInvokePostBody(IODataRequestMessage message, IEdmOperation operation) { using (var messageReader = new ODataMessageReader(message, this.GetReaderSettings(), this.DataSource.Model)) { List <Expression> parameterValues = new List <Expression>(); var parameterReader = messageReader.CreateODataParameterReader(operation); while (parameterReader.Read()) { switch (parameterReader.State) { case ODataParameterReaderState.Value: { object clrValue = ODataObjectModelConverter.ConvertPropertyValue(parameterReader.Value); parameterValues.Add(Expression.Constant(clrValue)); break; } case ODataParameterReaderState.Collection: { ODataCollectionReader collectionReader = parameterReader.CreateCollectionReader(); object clrValue = ODataObjectModelConverter.ConvertPropertyValue(ODataObjectModelConverter.ReadCollectionParameterValue(collectionReader)); parameterValues.Add(Expression.Constant(clrValue, clrValue.GetType())); break; } case ODataParameterReaderState.Entry: { var entryReader = parameterReader.CreateEntryReader(); object clrValue = ODataObjectModelConverter.ConvertPropertyValue(ODataObjectModelConverter.ReadEntryParameterValue(entryReader)); parameterValues.Add(Expression.Constant(clrValue, clrValue.GetType())); break; } case ODataParameterReaderState.Feed: { IList collectionList = null; var feedReader = parameterReader.CreateFeedReader(); while (feedReader.Read()) { if (feedReader.State == ODataReaderState.EntryEnd) { object clrItem = ODataObjectModelConverter.ConvertPropertyValue(feedReader.Item); if (collectionList == null) { Type itemType = clrItem.GetType(); Type listType = typeof(List <>).MakeGenericType(new[] { itemType }); collectionList = (IList)Utility.QuickCreateInstance(listType); } collectionList.Add(clrItem); } } parameterValues.Add(Expression.Constant(collectionList, collectionList.GetType())); break; } } } return(parameterValues.ToArray()); } }