本文整理汇总了C#中Microsoft.OData.Core.UriParser.Parsers.BindingState类的典型用法代码示例。如果您正苦于以下问题:C# BindingState类的具体用法?C# BindingState怎么用?C# BindingState使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
BindingState类属于Microsoft.OData.Core.UriParser.Parsers命名空间,在下文中一共展示了BindingState类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BindLambdaToken
/// <summary>
/// Binds a LambdaToken to metadata.
/// </summary>
/// <param name="lambdaToken">Token to bind.</param>
/// <param name="state">Object to hold the state of binding.</param>
/// <returns>A metadata bound any or all node.</returns>
internal LambdaNode BindLambdaToken(LambdaToken lambdaToken, BindingState state)
{
ExceptionUtils.CheckArgumentNotNull(lambdaToken, "LambdaToken");
ExceptionUtils.CheckArgumentNotNull(state, "state");
// Start by binding the parent token
CollectionNode parent = this.BindParentToken(lambdaToken.Parent);
RangeVariable rangeVariable = null;
// Add the lambda variable to the stack
if (lambdaToken.Parameter != null)
{
rangeVariable = NodeFactory.CreateParameterNode(lambdaToken.Parameter, parent);
state.RangeVariables.Push(rangeVariable);
}
// Bind the expression
SingleValueNode expression = this.BindExpressionToken(lambdaToken.Expression);
// Create the node
LambdaNode lambdaNode = NodeFactory.CreateLambdaNode(state, parent, expression, rangeVariable, lambdaToken.Kind);
// Remove the lambda variable as it is now out of scope
if (rangeVariable != null)
{
state.RangeVariables.Pop();
}
return lambdaNode;
}
示例2: BinderBase
/// <summary>
/// Constructor for binderbase.
/// </summary>
/// <param name="bindMethod">Method to use for binding the parent token, if needed.</param>
/// <param name="state">State of the metadata binding.</param>
protected BinderBase(MetadataBinder.QueryTokenVisitor bindMethod, BindingState state)
{
ExceptionUtils.CheckArgumentNotNull(bindMethod, "bindMethod");
ExceptionUtils.CheckArgumentNotNull(state, "state");
this.bindMethod = bindMethod;
this.state = state;
}
示例3: BindParameterAlias
/// <summary>
/// Bind a parameter alias which is inside another alias value.
/// </summary>
/// <param name="bindingState">The alias name which is inside another alias value.</param>
/// <param name="aliasToken">The cache of alias value nodes</param>
/// <returns>The semantics node tree for alias (the @p1 in "@p1=...", not alias value expression)</returns>
internal ParameterAliasNode BindParameterAlias(BindingState bindingState, FunctionParameterAliasToken aliasToken)
{
ExceptionUtils.CheckArgumentNotNull(bindingState, "bindingState");
ExceptionUtils.CheckArgumentNotNull(aliasToken, "aliasToken");
string alias = aliasToken.Alias;
ParameterAliasValueAccessor aliasValueAccessor = bindingState.Configuration.ParameterAliasValueAccessor;
if (aliasValueAccessor == null)
{
return new ParameterAliasNode(alias, null);
}
// in cache?
SingleValueNode aliasValueNode = null;
if (!aliasValueAccessor.ParameterAliasValueNodesCached.TryGetValue(alias, out aliasValueNode))
{
// has value expression?
string aliasValueExpression = aliasValueAccessor.GetAliasValueExpression(alias);
if (aliasValueExpression == null)
{
aliasValueAccessor.ParameterAliasValueNodesCached[alias] = null;
}
else
{
aliasValueNode = this.ParseAndBindParameterAliasValueExpression(bindingState, aliasValueExpression, aliasToken.ExpectedParameterType);
aliasValueAccessor.ParameterAliasValueNodesCached[alias] = aliasValueNode;
}
}
return new ParameterAliasNode(alias, aliasValueNode.GetEdmTypeReference());
}
示例4: MetadataBinder
/// <summary>
/// Constructs a MetadataBinder with the given <paramref name="initialState"/>.
/// This constructor gets used if you are not calling the top level entry point ParseQuery.
/// This is an at-your-own-risk constructor, since you must provide valid initial state.
/// </summary>
/// <param name="initialState">The initialState to use for binding.</param>
internal MetadataBinder(BindingState initialState)
{
ExceptionUtils.CheckArgumentNotNull(initialState, "initialState");
ExceptionUtils.CheckArgumentNotNull(initialState.Model, "initialState.Model");
this.BindingState = initialState;
}
示例5: Init
public void Init()
{
this.orderbyBinder = new OrderByBinder(FakeBindMethods.BindMethodReturningASinglePrimitive);
var implicitRangeVariable = new EntityRangeVariable(ExpressionConstants.It, HardCodedTestModel.GetPersonTypeReference(), HardCodedTestModel.GetPeopleSet());
this.bindingState = new BindingState(configuration) { ImplicitRangeVariable = implicitRangeVariable };
this.bindingState.RangeVariables.Push(new BindingState(configuration) { ImplicitRangeVariable = implicitRangeVariable }.ImplicitRangeVariable);
}
示例6: ApplyBinderTests
public ApplyBinderTests()
{
var implicitRangeVariable = new EntityRangeVariable(ExpressionConstants.It,
HardCodedTestModel.GetPersonTypeReference(), HardCodedTestModel.GetPeopleSet());
this._bindingState = new BindingState(_configuration) { ImplicitRangeVariable = implicitRangeVariable };
this._bindingState.RangeVariables.Push(
new BindingState(_configuration) { ImplicitRangeVariable = implicitRangeVariable }.ImplicitRangeVariable);
}
示例7: PrimitiveCollectionPropertyShouldCreateMatchingNode
public void PrimitiveCollectionPropertyShouldCreateMatchingNode()
{
var state = new BindingState(configuration);
var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASingleDog, state);
var token = new InnerPathToken("Nicknames", new DummyToken(), null /*namedValues*/);
var result = binder.BindInnerPathSegment(token);
result.ShouldBeCollectionPropertyAccessQueryNode(HardCodedTestModel.GetDogNicknamesProperty());
}
示例8: DeclaredPropertyOnOpenTypeShouldCreateMatchingNode
public void DeclaredPropertyOnOpenTypeShouldCreateMatchingNode()
{
var state = new BindingState(configuration);
var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASinglePainting, state);
var token = new InnerPathToken("Colors", new DummyToken(), null /*namedValues*/);
var result = binder.BindInnerPathSegment(token);
result.ShouldBeCollectionPropertyAccessQueryNode(HardCodedTestModel.GetPaintingColorsProperty());
}
示例9: OpenPropertyShouldCreateMatchingNode
public void OpenPropertyShouldCreateMatchingNode()
{
const string OpenPropertyName = "Emotions";
var state = new BindingState(configuration);
var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASinglePainting, state);
var token = new InnerPathToken(OpenPropertyName, new DummyToken(), null /*namedValues*/);
var result = binder.BindInnerPathSegment(token);
result.ShouldBeSingleValueOpenPropertyAccessQueryNode(OpenPropertyName);
}
示例10: CollectionNavigationPropertyShouldCreateMatchingNode
public void CollectionNavigationPropertyShouldCreateMatchingNode()
{
var state = new BindingState(configuration);
var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASingleDog, state);
var token = new InnerPathToken("MyPeople", new DummyToken(), null /*namedValues*/);
var result = binder.BindInnerPathSegment(token);
result.ShouldBeCollectionNavigationNode(HardCodedTestModel.GetDogMyPeopleNavProp()).
And.NavigationSource.Should().BeSameAs(HardCodedTestModel.GetDogsSet().FindNavigationTarget(HardCodedTestModel.GetDogMyPeopleNavProp()));
}
示例11: CreateLambdaNodeForAnyTokenShouldCreateAnyNode
public void CreateLambdaNodeForAnyTokenShouldCreateAnyNode()
{
BindingState bindingState = new BindingState(configuration);
EntityCollectionNode parent = new EntitySetNode(HardCodedTestModel.GetPeopleSet());
SingleValueNode expression = new ConstantNode(true);
RangeVariable rangeVariable = new EntityRangeVariable("bob", HardCodedTestModel.GetPersonTypeReference(), parent);
var resultNode = NodeFactory.CreateLambdaNode(bindingState, parent, expression, rangeVariable, QueryTokenKind.Any);
var node = resultNode.ShouldBeAnyQueryNode().And;
node.Body.Should().BeSameAs(expression);
node.Source.Should().BeSameAs(parent);
}
示例12: CreateParentFromImplicitRangeVariable
/// <summary>
/// Constructs parent node from binding state
/// </summary>
/// <param name="state">Current binding state</param>
/// <returns>The parent node.</returns>
internal static SingleValueNode CreateParentFromImplicitRangeVariable(BindingState state)
{
ExceptionUtils.CheckArgumentNotNull(state, "state");
// If the Parent is null, then it must be referring to the implicit $it parameter
if (state.ImplicitRangeVariable == null)
{
throw new ODataException(ODataErrorStrings.MetadataBinder_PropertyAccessWithoutParentParameter);
}
return NodeFactory.CreateRangeVariableReferenceNode(state.ImplicitRangeVariable);
}
示例13: MissingPropertyShouldThrow
public void MissingPropertyShouldThrow()
{
const string MissingPropertyName = "ThisPropertyDoesNotExist";
var state = new BindingState(configuration);
var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASingleDog, state);
var token = new InnerPathToken(MissingPropertyName, new DummyToken(), null /*namedValues*/);
Action bind = () => binder.BindInnerPathSegment(token);
string expectedMessage =
ODataErrorStrings.MetadataBinder_PropertyNotDeclared(HardCodedTestModel.GetDogType().FullTypeName(), MissingPropertyName);
bind.ShouldThrow<ODataException>(expectedMessage);
}
示例14: BindRangeVariableToken
/// <summary>
/// Binds a parameter token.
/// </summary>
/// <param name="rangeVariableToken">The parameter token to bind.</param>
/// <param name="state">The state of metadata binding.</param>
/// <returns>The bound query node.</returns>
internal static SingleValueNode BindRangeVariableToken(RangeVariableToken rangeVariableToken, BindingState state)
{
ExceptionUtils.CheckArgumentNotNull(rangeVariableToken, "rangeVariableToken");
RangeVariable rangeVariable = state.RangeVariables.SingleOrDefault(p => p.Name == rangeVariableToken.Name);
if (rangeVariable == null)
{
throw new ODataException(ODataErrorStrings.MetadataBinder_ParameterNotInScope(rangeVariableToken.Name));
}
return NodeFactory.CreateRangeVariableReferenceNode(rangeVariable);
}
示例15: BindOrderBy
/// <summary>
/// Processes the order-by tokens of a entityCollection (if any).
/// </summary>
/// <param name="state">State to use for binding.</param>
/// <param name="orderByTokens">The order-by tokens to bind.</param>
/// <returns>An OrderByClause representing the orderby statements expressed in the tokens.</returns>
internal OrderByClause BindOrderBy(BindingState state, IEnumerable<OrderByToken> orderByTokens)
{
ExceptionUtils.CheckArgumentNotNull(state, "state");
ExceptionUtils.CheckArgumentNotNull(orderByTokens, "orderByTokens");
OrderByClause orderByClause = null;
// Go through the orderby tokens starting from the last one
foreach (OrderByToken orderByToken in orderByTokens.Reverse())
{
orderByClause = this.ProcessSingleOrderBy(state, orderByClause, orderByToken);
}
return orderByClause;
}