Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Objects / ELinq / ObjectQueryProvider.cs / 1305376 / ObjectQueryProvider.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Data.Objects.Internal;
using System.Data.Metadata.Edm;
using System.Diagnostics;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace System.Data.Objects.ELinq
{
///
/// LINQ query provider implementation.
///
internal sealed class ObjectQueryProvider : IQueryProvider
{
private readonly ObjectContext _context;
internal ObjectQueryProvider(ObjectContext context)
{
Debug.Assert(null != context, "context must be given");
_context = context;
}
///
/// Creates a new query instance using the given LINQ expresion.
/// The current query is used to produce the context for the new query, but none of its logic
/// is used.
///
/// Element type for query result.
/// LINQ expression forming the query.
/// ObjectQuery implementing the expression logic.
IQueryable IQueryProvider.CreateQuery(Expression expression)
{
EntityUtil.CheckArgumentNull(expression, "expression");
if (!typeof(IQueryable).IsAssignableFrom(expression.Type))
{
throw EntityUtil.Argument(System.Data.Entity.Strings.ELinq_ExpressionMustBeIQueryable, "expression");
}
ObjectQuery query = CreateQuery(expression);
return query;
}
///
/// Executes the given LINQ expression returning a single value, or null if the query yields
/// no results. If the return type is unexpected, raises a cast exception.
/// The current query is used to produce the context for the new query, but none of its logic
/// is used.
///
/// Type of returned value.
/// Expression to evaluate.
/// Single result from execution.
S IQueryProvider.Execute(Expression expression)
{
EntityUtil.CheckArgumentNull(expression, "expression");
ObjectQuery query = CreateQuery(expression);
return ExecuteSingle(query, expression);
}
///
/// Creates a new query instance using the given LINQ expresion.
/// The current query is used to produce the context for the new query, but none of its logic
/// is used.
///
/// Expression forming the query.
/// ObjectQuery instance implementing the given expression.
IQueryable IQueryProvider.CreateQuery(Expression expression)
{
EntityUtil.CheckArgumentNull(expression, "expression");
if (!typeof(IQueryable).IsAssignableFrom(expression.Type))
{
throw EntityUtil.Argument(System.Data.Entity.Strings.ELinq_ExpressionMustBeIQueryable, "expression");
}
// Determine the type of the query instance by binding generic parameter in Query<>.Queryable
// (based on element type of expression)
Type elementType = TypeSystem.GetElementType(expression.Type);
ObjectQuery query = CreateQuery(expression, elementType);
return query;
}
///
/// Executes the given LINQ expression returning a single value, or null if the query yields
/// no results.
/// The current query is used to produce the context for the new query, but none of its logic
/// is used.
///
/// Expression to evaluate.
/// Single result from execution.
object IQueryProvider.Execute(Expression expression)
{
EntityUtil.CheckArgumentNull(expression, "expression");
ObjectQuery query = CreateQuery(expression, expression.Type);
IEnumerable
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BinarySerializer.cs
- ValidatorUtils.cs
- OdbcParameter.cs
- SymLanguageVendor.cs
- ProtectedConfigurationSection.cs
- SetStateDesigner.cs
- SqlReferenceCollection.cs
- Compiler.cs
- CrossAppDomainChannel.cs
- PathGeometry.cs
- TypeToArgumentTypeConverter.cs
- StrongNameMembershipCondition.cs
- LocatorPart.cs
- StreamGeometryContext.cs
- controlskin.cs
- EdmItemError.cs
- DataServiceQueryException.cs
- CellTreeNode.cs
- ValueUtilsSmi.cs
- SeparatorAutomationPeer.cs
- ClientScriptManagerWrapper.cs
- XmlSerializerSection.cs
- DynamicResourceExtensionConverter.cs
- XmlSchemaAnyAttribute.cs
- AttachmentCollection.cs
- Image.cs
- _ListenerResponseStream.cs
- EmptyCollection.cs
- PageWrapper.cs
- BaseHashHelper.cs
- DataGridRowAutomationPeer.cs
- UnsafeNativeMethods.cs
- ThreadStartException.cs
- TransportChannelFactory.cs
- _emptywebproxy.cs
- DispatcherOperation.cs
- SliderAutomationPeer.cs
- SendActivityDesigner.cs
- CmsInterop.cs
- ObjectTokenCategory.cs
- DesignerVerb.cs
- Splitter.cs
- TaiwanCalendar.cs
- OletxVolatileEnlistment.cs
- CompiledXpathExpr.cs
- X509ChainElement.cs
- DBSchemaRow.cs
- NamespaceInfo.cs
- Util.cs
- Array.cs
- InvokeHandlers.cs
- CaseInsensitiveComparer.cs
- SystemDropShadowChrome.cs
- TraceListener.cs
- IisNotInstalledException.cs
- DataGridViewAdvancedBorderStyle.cs
- StateItem.cs
- BamlRecords.cs
- FragmentQueryKB.cs
- VerticalAlignConverter.cs
- ApplicationException.cs
- PageAsyncTask.cs
- LocatorBase.cs
- SmiEventSink.cs
- StyleReferenceConverter.cs
- UpDownEvent.cs
- Point.cs
- InputReportEventArgs.cs
- SmtpDigestAuthenticationModule.cs
- TemplatePagerField.cs
- PngBitmapEncoder.cs
- ThicknessAnimationUsingKeyFrames.cs
- CookieParameter.cs
- WorkflowInstance.cs
- HandledMouseEvent.cs
- UniqueID.cs
- UrlMappingCollection.cs
- ToolStripDropDownClosedEventArgs.cs
- Binding.cs
- TableRowCollection.cs
- RepeaterItem.cs
- ProfessionalColors.cs
- AnnouncementDispatcherAsyncResult.cs
- UntypedNullExpression.cs
- OracleParameter.cs
- XmlSchemaAnnotated.cs
- WasHttpModulesInstallComponent.cs
- sqlstateclientmanager.cs
- CopyAttributesAction.cs
- UnauthorizedWebPart.cs
- Addressing.cs
- FigureHelper.cs
- RangeValuePatternIdentifiers.cs
- CultureMapper.cs
- AsymmetricSignatureDeformatter.cs
- AsymmetricSecurityProtocolFactory.cs
- EventListenerClientSide.cs
- DataServiceProcessingPipeline.cs
- MessageHeader.cs
- httpserverutility.cs