Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataWeb / Client / System / Data / Services / Client / ALinq / DataServiceQueryProvider.cs / 1 / DataServiceQueryProvider.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Query Provider for Linq to URI translatation // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Client { using System; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; using System.Reflection; ////// QueryProvider implementation /// internal sealed class DataServiceQueryProvider : IQueryProvider { ///DataServiceContext for query provider internal readonly DataServiceContext Context; ///Constructs a query provider based on the context passed in /// The context for the query provider internal DataServiceQueryProvider(DataServiceContext context) { this.Context = context; } #region IQueryProvider implementation ///Factory method for creating DataServiceOrderedQuery based on expression /// The expression for the new query ///new DataServiceQuery public IQueryable CreateQuery(Expression expression) { Util.CheckArgumentNull(expression, "expression"); Type et = TypeSystem.GetElementType(expression.Type); Type qt = typeof(DataServiceQuery<>.DataServiceOrderedQuery).MakeGenericType(et); object[] args = new object[] { expression, this }; ConstructorInfo ci = qt.GetConstructor( BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(Expression), typeof(DataServiceQueryProvider) }, null); return (IQueryable)ci.Invoke(args); } ///Factory method for creating DataServiceOrderedQuery based on expression ///generic type /// The expression for the new query ///new DataServiceQuery public IQueryableCreateQuery (Expression expression) { Util.CheckArgumentNull(expression, "expression"); return new DataServiceQuery .DataServiceOrderedQuery(expression, this); } /// Creates and executes a DataServiceQuery based on the passed in expression /// The expression for the new query ///the results public object Execute(Expression expression) { Util.CheckArgumentNull(expression, "expression"); MethodInfo mi = typeof(DataServiceQueryProvider).GetMethod("ReturnSingleton", BindingFlags.NonPublic | BindingFlags.Instance); return mi.MakeGenericMethod(expression.Type).Invoke(this, new object[] { expression }); } ///Creates and executes a DataServiceQuery based on the passed in expression ///generic type /// The expression for the new query ///the results public TResult Execute(Expression expression) { Util.CheckArgumentNull(expression, "expression"); return ReturnSingleton (expression); } #endregion /// Creates and executes a DataServiceQuery based on the passed in expression which results a single value ///generic type /// The expression for the new query ///single valued results internal TElement ReturnSingleton(Expression expression) { IQueryable query = new DataServiceQuery .DataServiceOrderedQuery(expression, this); MethodCallExpression mce = expression as MethodCallExpression; Debug.Assert(mce != null, "mce != null"); SequenceMethod sequenceMethod; if (ReflectionUtil.TryIdentifySequenceMethod(mce.Method, out sequenceMethod)) { switch (sequenceMethod) { case SequenceMethod.Single: return query.AsEnumerable().Single(); case SequenceMethod.SingleOrDefault: return query.AsEnumerable().SingleOrDefault(); case SequenceMethod.First: return query.AsEnumerable().First(); case SequenceMethod.FirstOrDefault: return query.AsEnumerable().FirstOrDefault(); default: throw Error.MethodNotSupported(mce); } } // Should never get here - should be caught by expression compiler. Debug.Assert(false, "Not supported singleton operator not caught by Resource Binder"); throw Error.MethodNotSupported(mce); } /// Builds the Uri for the expression passed in. /// The expression to translate into a Uri ///the resulting Uri internal Uri Translate(Expression e) { // short cut analysis if just a resource set if (!(e is ResourceSetExpression)) { e = Evaluator.PartialEval(e); e = new ExpressionNormalizer().Visit(e); e = ResourceBinder.Bind(e); } string translation = UriWriter.Translate(this.Context, e); return Util.CreateUri(this.Context.BaseUriWithSlash, Util.CreateUri(translation, UriKind.Relative)); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Query Provider for Linq to URI translatation // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Client { using System; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; using System.Reflection; ////// QueryProvider implementation /// internal sealed class DataServiceQueryProvider : IQueryProvider { ///DataServiceContext for query provider internal readonly DataServiceContext Context; ///Constructs a query provider based on the context passed in /// The context for the query provider internal DataServiceQueryProvider(DataServiceContext context) { this.Context = context; } #region IQueryProvider implementation ///Factory method for creating DataServiceOrderedQuery based on expression /// The expression for the new query ///new DataServiceQuery public IQueryable CreateQuery(Expression expression) { Util.CheckArgumentNull(expression, "expression"); Type et = TypeSystem.GetElementType(expression.Type); Type qt = typeof(DataServiceQuery<>.DataServiceOrderedQuery).MakeGenericType(et); object[] args = new object[] { expression, this }; ConstructorInfo ci = qt.GetConstructor( BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(Expression), typeof(DataServiceQueryProvider) }, null); return (IQueryable)ci.Invoke(args); } ///Factory method for creating DataServiceOrderedQuery based on expression ///generic type /// The expression for the new query ///new DataServiceQuery public IQueryableCreateQuery (Expression expression) { Util.CheckArgumentNull(expression, "expression"); return new DataServiceQuery .DataServiceOrderedQuery(expression, this); } /// Creates and executes a DataServiceQuery based on the passed in expression /// The expression for the new query ///the results public object Execute(Expression expression) { Util.CheckArgumentNull(expression, "expression"); MethodInfo mi = typeof(DataServiceQueryProvider).GetMethod("ReturnSingleton", BindingFlags.NonPublic | BindingFlags.Instance); return mi.MakeGenericMethod(expression.Type).Invoke(this, new object[] { expression }); } ///Creates and executes a DataServiceQuery based on the passed in expression ///generic type /// The expression for the new query ///the results public TResult Execute(Expression expression) { Util.CheckArgumentNull(expression, "expression"); return ReturnSingleton (expression); } #endregion /// Creates and executes a DataServiceQuery based on the passed in expression which results a single value ///generic type /// The expression for the new query ///single valued results internal TElement ReturnSingleton(Expression expression) { IQueryable query = new DataServiceQuery .DataServiceOrderedQuery(expression, this); MethodCallExpression mce = expression as MethodCallExpression; Debug.Assert(mce != null, "mce != null"); SequenceMethod sequenceMethod; if (ReflectionUtil.TryIdentifySequenceMethod(mce.Method, out sequenceMethod)) { switch (sequenceMethod) { case SequenceMethod.Single: return query.AsEnumerable().Single(); case SequenceMethod.SingleOrDefault: return query.AsEnumerable().SingleOrDefault(); case SequenceMethod.First: return query.AsEnumerable().First(); case SequenceMethod.FirstOrDefault: return query.AsEnumerable().FirstOrDefault(); default: throw Error.MethodNotSupported(mce); } } // Should never get here - should be caught by expression compiler. Debug.Assert(false, "Not supported singleton operator not caught by Resource Binder"); throw Error.MethodNotSupported(mce); } /// Builds the Uri for the expression passed in. /// The expression to translate into a Uri ///the resulting Uri internal Uri Translate(Expression e) { // short cut analysis if just a resource set if (!(e is ResourceSetExpression)) { e = Evaluator.PartialEval(e); e = new ExpressionNormalizer().Visit(e); e = ResourceBinder.Bind(e); } string translation = UriWriter.Translate(this.Context, e); return Util.CreateUri(this.Context.BaseUriWithSlash, Util.CreateUri(translation, UriKind.Relative)); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSerializationWriter.cs
- PathFigureCollection.cs
- PasswordBoxAutomationPeer.cs
- XPathCompileException.cs
- CodeSnippetStatement.cs
- SqlTrackingQuery.cs
- EraserBehavior.cs
- RowSpanVector.cs
- ParserOptions.cs
- XmlNotation.cs
- _SSPIWrapper.cs
- BaseInfoTable.cs
- LogConverter.cs
- ISAPIRuntime.cs
- WebPartDisplayModeCancelEventArgs.cs
- VectorConverter.cs
- HttpApplication.cs
- AuthorizationRule.cs
- ActiveDocumentEvent.cs
- MetadataItemEmitter.cs
- FlowLayout.cs
- DesignerTextWriter.cs
- XsltArgumentList.cs
- GridViewDeletedEventArgs.cs
- QilTypeChecker.cs
- SchemaCollectionCompiler.cs
- XmlUTF8TextReader.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- Span.cs
- RemotingConfiguration.cs
- SelectionChangedEventArgs.cs
- Geometry3D.cs
- DesignerOptionService.cs
- PropertyCondition.cs
- DataSourceXmlElementAttribute.cs
- filewebresponse.cs
- HtmlInputText.cs
- PropertiesTab.cs
- PermissionSet.cs
- SecurityContext.cs
- ComContractElementCollection.cs
- TextFormatterHost.cs
- MobileComponentEditorPage.cs
- RayMeshGeometry3DHitTestResult.cs
- CreateUserErrorEventArgs.cs
- DataGridViewLinkCell.cs
- HTTPNotFoundHandler.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- XmlEntityReference.cs
- HttpConfigurationContext.cs
- GeometryHitTestResult.cs
- WebServiceHandler.cs
- Size3DValueSerializer.cs
- CacheOutputQuery.cs
- PhonemeConverter.cs
- MessageSecurityException.cs
- DateTimeUtil.cs
- RouteParser.cs
- AuthenticationManager.cs
- TrustLevelCollection.cs
- FileRecordSequenceCompletedAsyncResult.cs
- TypeElement.cs
- _Win32.cs
- BStrWrapper.cs
- XmlSchemaExporter.cs
- MaterialGroup.cs
- ScrollPatternIdentifiers.cs
- QueryCorrelationInitializer.cs
- WindowsListViewGroupSubsetLink.cs
- XomlCompilerHelpers.cs
- ToolStripPanelCell.cs
- ProcessHostMapPath.cs
- MenuAdapter.cs
- TextElement.cs
- SelectManyQueryOperator.cs
- FixUpCollection.cs
- LOSFormatter.cs
- LoginView.cs
- OutputScope.cs
- TextRange.cs
- SoapFormatter.cs
- XamlTypeWithExplicitNamespace.cs
- LabelLiteral.cs
- CleanUpVirtualizedItemEventArgs.cs
- NamedPipeWorkerProcess.cs
- CompilerError.cs
- JsonStringDataContract.cs
- DateTimeFormat.cs
- SiteMapProvider.cs
- Dynamic.cs
- MultiByteCodec.cs
- ClientUtils.cs
- DetailsViewPageEventArgs.cs
- RelationshipEndMember.cs
- Debugger.cs
- DefaultTextStore.cs
- RubberbandSelector.cs
- PropertyNames.cs
- GroupBoxRenderer.cs
- BooleanAnimationUsingKeyFrames.cs