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();
}
IEnumerator IEnumerable.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();
}
IEnumerator IEnumerable.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
- shaperfactory.cs
- SiteMapDataSourceView.cs
- ComPersistableTypeElementCollection.cs
- AssemblySettingAttributes.cs
- RuntimeIdentifierPropertyAttribute.cs
- DesignerSerializationVisibilityAttribute.cs
- Listbox.cs
- HtmlProps.cs
- ExecutionEngineException.cs
- TypeBuilder.cs
- ConfigXmlDocument.cs
- XmlTextAttribute.cs
- PageAsyncTaskManager.cs
- ISAPIWorkerRequest.cs
- ListItemCollection.cs
- CompilerResults.cs
- AppearanceEditorPart.cs
- OperationResponse.cs
- ObjectDisposedException.cs
- TableItemPatternIdentifiers.cs
- EllipseGeometry.cs
- ViewBox.cs
- ElementMarkupObject.cs
- SqlDataSourceView.cs
- Camera.cs
- AddInEnvironment.cs
- DisplayInformation.cs
- DispatcherObject.cs
- HttpConfigurationContext.cs
- DefaultShape.cs
- ObjectParameterCollection.cs
- ModelTreeManager.cs
- WinEventQueueItem.cs
- SessionStateContainer.cs
- SiteMapDataSourceDesigner.cs
- TypedServiceOperationListItem.cs
- FileVersionInfo.cs
- TextFormatter.cs
- RtType.cs
- WebScriptMetadataFormatter.cs
- ToolStripItemImageRenderEventArgs.cs
- RawKeyboardInputReport.cs
- RadialGradientBrush.cs
- FilteredDataSetHelper.cs
- ClientSettingsSection.cs
- HtmlInputCheckBox.cs
- SetStoryboardSpeedRatio.cs
- ImageCodecInfo.cs
- PageBuildProvider.cs
- CheckBoxFlatAdapter.cs
- SQlBooleanStorage.cs
- CodeDelegateInvokeExpression.cs
- XamlLoadErrorInfo.cs
- ClientSession.cs
- MissingMethodException.cs
- SafeFindHandle.cs
- DesignerSerializationOptionsAttribute.cs
- ProcessHostServerConfig.cs
- SHA256.cs
- ClientSession.cs
- ManagementObjectSearcher.cs
- OptimizedTemplateContentHelper.cs
- DockPattern.cs
- SqlDataSourceSelectingEventArgs.cs
- SchemaNotation.cs
- ProxyAssemblyNotLoadedException.cs
- DefaultMemberAttribute.cs
- WebMessageFormatHelper.cs
- AnnotationService.cs
- Ray3DHitTestResult.cs
- ZipIOLocalFileHeader.cs
- connectionpool.cs
- _SpnDictionary.cs
- PeerNameRegistration.cs
- MergePropertyDescriptor.cs
- ScrollBar.cs
- DefaultSection.cs
- WebPartMenu.cs
- EntityObject.cs
- TypeToken.cs
- Win32.cs
- CounterCreationData.cs
- WebPartAuthorizationEventArgs.cs
- ClientSettingsProvider.cs
- DataConnectionHelper.cs
- CaseInsensitiveComparer.cs
- DataBinder.cs
- RefType.cs
- WorkflowServiceHostFactory.cs
- PropertyItem.cs
- BuildProvider.cs
- AssociationTypeEmitter.cs
- InheritanceRules.cs
- ContentTextAutomationPeer.cs
- DesignerLoader.cs
- WebHttpDispatchOperationSelector.cs
- BasicHttpSecurityMode.cs
- EdgeProfileValidation.cs
- DbTransaction.cs
- SafeNativeMethodsMilCoreApi.cs