Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- AccessedThroughPropertyAttribute.cs
- _SafeNetHandles.cs
- DBConcurrencyException.cs
- FontSource.cs
- QueryPageSettingsEventArgs.cs
- InternalsVisibleToAttribute.cs
- FixedSOMImage.cs
- InvocationExpression.cs
- ListMarkerLine.cs
- ActionMessageFilterTable.cs
- SqlRowUpdatingEvent.cs
- ExecutedRoutedEventArgs.cs
- CallSiteHelpers.cs
- ObjectHandle.cs
- MessageDesigner.cs
- BitmapEffectCollection.cs
- ElementHost.cs
- connectionpool.cs
- SubMenuStyleCollection.cs
- QualificationDataItem.cs
- RequestCache.cs
- GeneralTransform2DTo3DTo2D.cs
- HostedElements.cs
- ICspAsymmetricAlgorithm.cs
- Rect.cs
- XmlSchemaNotation.cs
- ExpressionLexer.cs
- MergePropertyDescriptor.cs
- HtmlMobileTextWriter.cs
- DecimalAverageAggregationOperator.cs
- Parsers.cs
- RowUpdatingEventArgs.cs
- TimerElapsedEvenArgs.cs
- MenuItemStyleCollection.cs
- SynchronizationFilter.cs
- Translator.cs
- DataGridViewEditingControlShowingEventArgs.cs
- ManagementObject.cs
- Site.cs
- TextContainerChangedEventArgs.cs
- ProcessModelSection.cs
- BamlLocalizableResourceKey.cs
- EmitterCache.cs
- CacheDependency.cs
- DictationGrammar.cs
- XamlUtilities.cs
- SystemException.cs
- LogEntryDeserializer.cs
- SystemWebCachingSectionGroup.cs
- PlainXmlDeserializer.cs
- DataGridViewDataErrorEventArgs.cs
- ClickablePoint.cs
- Ops.cs
- MethodBuilderInstantiation.cs
- ScaleTransform.cs
- ErrorFormatterPage.cs
- ExtenderHelpers.cs
- DataBindingExpressionBuilder.cs
- Peer.cs
- ConditionalAttribute.cs
- JoinCqlBlock.cs
- XappLauncher.cs
- LayoutUtils.cs
- MergeFailedEvent.cs
- Vector3DCollectionValueSerializer.cs
- RSAOAEPKeyExchangeFormatter.cs
- MimeTypeAttribute.cs
- FixedMaxHeap.cs
- PostBackOptions.cs
- InheritanceContextChangedEventManager.cs
- ContextTokenTypeConverter.cs
- CryptographicAttribute.cs
- DirectoryLocalQuery.cs
- ContentWrapperAttribute.cs
- TextSearch.cs
- DataBindEngine.cs
- EdmPropertyAttribute.cs
- TablePattern.cs
- AsymmetricCryptoHandle.cs
- ThreadExceptionDialog.cs
- WindowsSecurityToken.cs
- Vector3DConverter.cs
- Win32.cs
- ErrorHandler.cs
- filewebresponse.cs
- CompoundFileStreamReference.cs
- AppDomainManager.cs
- ServiceOperationViewControl.cs
- HtmlEmptyTagControlBuilder.cs
- RowParagraph.cs
- TableRow.cs
- DNS.cs
- PrefixHandle.cs
- CompilerError.cs
- PageDeviceFont.cs
- HandlerFactoryCache.cs
- DeclaredTypeElementCollection.cs
- BeginEvent.cs
- WebDisplayNameAttribute.cs
- Assert.cs