Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DLinq / Dlinq / DataQuery.cs / 1 / DataQuery.cs
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Linq.Expressions; using System.Linq; using System.Reflection; using System.Diagnostics; namespace System.Data.Linq { using System.Data.Linq.Mapping; using System.Data.Linq.Provider; internal sealed class DataQuery: IOrderedQueryable , IQueryProvider, IEnumerable , IOrderedQueryable, IEnumerable, IListSource { DataContext context; Expression queryExpression; private IBindingList cachedList; public DataQuery(DataContext context, Expression expression) { this.context = context; this.queryExpression = expression; } Expression IQueryable.Expression { get { return this.queryExpression; } } Type IQueryable.ElementType { get { return typeof(T); } } IQueryable IQueryProvider.CreateQuery(Expression expression) { if (expression == null) throw Error.ArgumentNull("expression"); Type eType = System.Data.Linq.SqlClient.TypeSystem.GetElementType(expression.Type); Type qType = typeof(IQueryable<>).MakeGenericType(eType); if (!qType.IsAssignableFrom(expression.Type)) throw Error.ExpectedQueryableArgument("expression", qType); Type dqType = typeof(DataQuery<>).MakeGenericType(eType); return (IQueryable)Activator.CreateInstance(dqType, new object[] { this.context, expression }); } IQueryable IQueryProvider.CreateQuery(Expression expression) { if (expression == null) throw Error.ArgumentNull("expression"); if (!typeof(IQueryable).IsAssignableFrom(expression.Type)) throw Error.ExpectedQueryableArgument("expression", typeof(IEnumerable)); return new DataQuery(this.context, expression); } object IQueryProvider.Execute(Expression expression) { return this.context.Provider.Execute(expression).ReturnValue; } S IQueryProvider.Execute(Expression expression) { return (S)this.context.Provider.Execute(expression).ReturnValue; } IQueryProvider IQueryable.Provider { get{ return (IQueryProvider)this; } } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator(); } IEnumeratorIEnumerable .GetEnumerator() { return ((IEnumerable )this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator(); } bool IListSource.ContainsListCollection { get { return false; } } IList IListSource.GetList() { if (cachedList == null) { cachedList = GetNewBindingList(); } return cachedList; } internal IBindingList GetNewBindingList() { return BindingList.Create (this.context, this); } public override string ToString() { return this.context.Provider.GetQueryText(this.queryExpression); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Linq.Expressions; using System.Linq; using System.Reflection; using System.Diagnostics; namespace System.Data.Linq { using System.Data.Linq.Mapping; using System.Data.Linq.Provider; internal sealed class DataQuery : IOrderedQueryable , IQueryProvider, IEnumerable , IOrderedQueryable, IEnumerable, IListSource { DataContext context; Expression queryExpression; private IBindingList cachedList; public DataQuery(DataContext context, Expression expression) { this.context = context; this.queryExpression = expression; } Expression IQueryable.Expression { get { return this.queryExpression; } } Type IQueryable.ElementType { get { return typeof(T); } } IQueryable IQueryProvider.CreateQuery(Expression expression) { if (expression == null) throw Error.ArgumentNull("expression"); Type eType = System.Data.Linq.SqlClient.TypeSystem.GetElementType(expression.Type); Type qType = typeof(IQueryable<>).MakeGenericType(eType); if (!qType.IsAssignableFrom(expression.Type)) throw Error.ExpectedQueryableArgument("expression", qType); Type dqType = typeof(DataQuery<>).MakeGenericType(eType); return (IQueryable)Activator.CreateInstance(dqType, new object[] { this.context, expression }); } IQueryable IQueryProvider.CreateQuery(Expression expression) { if (expression == null) throw Error.ArgumentNull("expression"); if (!typeof(IQueryable).IsAssignableFrom(expression.Type)) throw Error.ExpectedQueryableArgument("expression", typeof(IEnumerable)); return new DataQuery(this.context, expression); } object IQueryProvider.Execute(Expression expression) { return this.context.Provider.Execute(expression).ReturnValue; } S IQueryProvider.Execute(Expression expression) { return (S)this.context.Provider.Execute(expression).ReturnValue; } IQueryProvider IQueryable.Provider { get{ return (IQueryProvider)this; } } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator(); } IEnumeratorIEnumerable .GetEnumerator() { return ((IEnumerable )this.context.Provider.Execute(this.queryExpression).ReturnValue).GetEnumerator(); } bool IListSource.ContainsListCollection { get { return false; } } IList IListSource.GetList() { if (cachedList == null) { cachedList = GetNewBindingList(); } return cachedList; } internal IBindingList GetNewBindingList() { return BindingList.Create (this.context, this); } public override string ToString() { return this.context.Provider.GetQueryText(this.queryExpression); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ScriptReferenceEventArgs.cs
- WebContentFormatHelper.cs
- EncryptedXml.cs
- RestHandlerFactory.cs
- MatrixIndependentAnimationStorage.cs
- SoapSchemaImporter.cs
- XamlBrushSerializer.cs
- WmlValidationSummaryAdapter.cs
- TextFormatterHost.cs
- ElapsedEventArgs.cs
- RangeValuePattern.cs
- ClrPerspective.cs
- DiscreteKeyFrames.cs
- PackageFilter.cs
- CodeTypeParameter.cs
- formatter.cs
- ProfileSection.cs
- XmlBindingWorker.cs
- SqlVisitor.cs
- TypeUsageBuilder.cs
- CorrelationValidator.cs
- SizeAnimationUsingKeyFrames.cs
- EdmToObjectNamespaceMap.cs
- MachineKeyConverter.cs
- MouseEventArgs.cs
- AddressAccessDeniedException.cs
- ToolboxSnapDragDropEventArgs.cs
- InheritanceRules.cs
- SaveFileDialog.cs
- XmlSerializerSection.cs
- VectorConverter.cs
- NavigationFailedEventArgs.cs
- DBCommandBuilder.cs
- IProvider.cs
- InstanceCompleteException.cs
- OrderingInfo.cs
- QilNode.cs
- IdentityHolder.cs
- SafeFileMappingHandle.cs
- GridItemCollection.cs
- QilInvokeLateBound.cs
- ValueConversionAttribute.cs
- EncodingTable.cs
- DesignerListAdapter.cs
- sqlpipe.cs
- ArrayItemValue.cs
- Section.cs
- TextSpanModifier.cs
- ObjectItemLoadingSessionData.cs
- ContourSegment.cs
- SingleObjectCollection.cs
- PbrsForward.cs
- RuntimeWrappedException.cs
- ClientSettingsProvider.cs
- ChangePasswordDesigner.cs
- AnnotationMap.cs
- DataObjectCopyingEventArgs.cs
- DbConnectionFactory.cs
- BuilderPropertyEntry.cs
- CompoundFileStreamReference.cs
- DurationConverter.cs
- NotFiniteNumberException.cs
- EndOfStreamException.cs
- KoreanCalendar.cs
- CodeChecksumPragma.cs
- SamlAttribute.cs
- TreeViewDataItemAutomationPeer.cs
- TypeSystemProvider.cs
- Overlapped.cs
- DesignBindingPropertyDescriptor.cs
- ApplicationGesture.cs
- SignatureGenerator.cs
- EntityDataSourceWrapperCollection.cs
- ImportCatalogPart.cs
- Point3D.cs
- StickyNote.cs
- ProfilePropertySettingsCollection.cs
- FormsAuthenticationCredentials.cs
- DbProviderFactory.cs
- NTAccount.cs
- AutoGeneratedFieldProperties.cs
- ListViewItemCollectionEditor.cs
- LogWriteRestartAreaAsyncResult.cs
- MultiPropertyDescriptorGridEntry.cs
- SqlServer2KCompatibilityCheck.cs
- QilInvokeEarlyBound.cs
- HttpWriter.cs
- Timer.cs
- MenuItemBindingCollection.cs
- XamlStyleSerializer.cs
- ReferencedAssembly.cs
- XPathNodeIterator.cs
- ScriptResourceHandler.cs
- EnumBuilder.cs
- RegionIterator.cs
- Grant.cs
- WindowsFormsHelpers.cs
- ProfileParameter.cs
- TypeBrowser.xaml.cs
- StringCollection.cs