Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceQueryBuilder.cs / 1305376 / EntityDataSourceQueryBuilder.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Data; using System.Data.Common; using System.Collections.Generic; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Data.Entity; using System.Data.Metadata.Edm; using System.Data.Objects; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Text; using System.Web.DynamicData; using System.Web.UI; using System.Linq.Expressions; namespace System.Web.UI.WebControls { internal abstract class EntityDataSourceQueryBuilder{ private readonly DataSourceSelectArguments _arguments; private readonly string _commandText; private readonly ObjectParameter[] _commandParameters; private readonly string _whereExpression; private readonly ObjectParameter[] _whereParameters; private readonly string _entitySetQueryExpression; private readonly OrderByBuilder _orderByBuilder; private string _includePaths; private TypeUsage _resultType; private Nullable _count; protected EntityDataSourceQueryBuilder(DataSourceSelectArguments arguments, string commandText, ObjectParameter[] commandParameters, string whereExpression, ObjectParameter[] whereParameters, string entitySetQueryExpression, string selectExpression, string groupByExpression, ObjectParameter[] selectParameters, OrderByBuilder orderByBuilder, string includePaths) { _arguments = arguments; _commandText = commandText; _commandParameters = commandParameters; _whereExpression = whereExpression; _whereParameters = whereParameters; _entitySetQueryExpression = entitySetQueryExpression; _orderByBuilder = orderByBuilder; _includePaths = includePaths; } internal delegate EntityDataSourceQueryBuilder Creator(DataSourceSelectArguments arguments, string commandText, ObjectParameter[] commandParameters, string whereExpression, ObjectParameter[] whereParameters, string entitySetQueryExpression, string selectExpression, string groupByExpression, ObjectParameter[] selectParameters, OrderByBuilder orderByBuilder, string includePaths); internal TypeUsage ResultType { get { Debug.Assert(_resultType != null, "ResultType is only valid after Build()"); return _resultType; } } internal int TotalCount { get { Debug.Assert(_count.HasValue, "Count is not valid until after Build. And only then if computeCount is true"); return _count.Value; } } internal IEnumerable Execute(ObjectQuery queryT) { return (IEnumerable)(((IListSource)(queryT)).GetList()); } internal ObjectQuery BuildBasicQuery(ObjectContext context, bool computeCount) { ObjectQuery queryT = QueryBuilderUtils.ConstructQuery (context, _entitySetQueryExpression, _commandText, _commandParameters); queryT = ApplyWhere(queryT); queryT = ApplySelect(queryT); // Select and/or GroupBy application _resultType = queryT.GetResultType(); return queryT; } internal ObjectQuery CompleteBuild(ObjectQuery queryT, ObjectContext context, bool computeCount, bool wasExtended) { if (computeCount) { _count = queryT.Count(); } queryT = wasExtended ? ApplyQueryableOrderByAndPaging(queryT) : ApplyOrderByAndPaging(queryT); queryT = ApplyIncludePaths(queryT); return queryT; } private ObjectQuery ApplyWhere(ObjectQuery queryT) { if (!String.IsNullOrEmpty(_whereExpression)) { queryT = queryT.Where(_whereExpression, _whereParameters); } return queryT; } protected abstract ObjectQuery ApplySelect(ObjectQuery queryT); internal ObjectQuery ApplyOrderBy(ObjectQuery queryT) { string orderByClause; ObjectParameter[] orderByParameters; // Apply all possible ordering except the sort expression, because it might only be valid after the query has been extended _orderByBuilder.Generate(_resultType, out orderByClause, out orderByParameters, false /*applySortExpression*/); return String.IsNullOrEmpty(orderByClause) ? queryT : queryT.OrderBy(orderByClause, orderByParameters); } private ObjectQuery ApplyOrderByAndPaging(ObjectQuery queryT) { // This re-applys the order-by as part of the skip string orderByClause; ObjectParameter[] orderByParameters; _orderByBuilder.Generate(_resultType, out orderByClause, out orderByParameters, true /*applySortExpression*/); bool paging = _arguments.MaximumRows > 0 && _arguments.StartRowIndex >= 0; var hasOrderByClause = !String.IsNullOrEmpty(orderByClause); if (paging) { if (!hasOrderByClause) { throw new InvalidOperationException(Strings.EntityDataSourceQueryBuilder_PagingRequiresOrderBy); } queryT = queryT.Skip(orderByClause, _arguments.StartRowIndex.ToString(CultureInfo.InvariantCulture), orderByParameters).Top(_arguments.MaximumRows.ToString(CultureInfo.InvariantCulture), QueryBuilderUtils.EmptyObjectParameters); } else { if (hasOrderByClause) { queryT = queryT.OrderBy(orderByClause, orderByParameters); } } return queryT; } private ObjectQuery ApplyQueryableOrderByAndPaging(ObjectQuery queryT) { queryT = _orderByBuilder.BuildQueryableOrderBy(queryT) as ObjectQuery ; bool paging = _arguments.MaximumRows > 0 && _arguments.StartRowIndex >= 0; if (paging) { queryT = queryT.Skip(_arguments.StartRowIndex).Take(_arguments.MaximumRows) as ObjectQuery ; } return queryT; } private ObjectQuery ApplyIncludePaths(ObjectQuery objectQuery) { if (!string.IsNullOrEmpty(_includePaths)) { foreach (string include in _includePaths.Split(',')) { string trimmedInclude = include.Trim(); if (!string.IsNullOrEmpty(trimmedInclude)) { objectQuery = objectQuery.Include(trimmedInclude); } } } return objectQuery; } } internal class EntityDataSourceObjectQueryBuilder : EntityDataSourceQueryBuilder { private EntityDataSourceObjectQueryBuilder(DataSourceSelectArguments arguments, string commandText, ObjectParameter[] commandParameters, string whereExpression, ObjectParameter[] whereParameters, string entitySetQueryExpression, string selectExpression, string groupByExpression, ObjectParameter[] selectParameters, OrderByBuilder orderByBuilder, string includePaths) : base(arguments, commandText, commandParameters, whereExpression, whereParameters, entitySetQueryExpression, selectExpression, groupByExpression, selectParameters, orderByBuilder, includePaths) { } static internal EntityDataSourceQueryBuilder .Creator GetCreator() { return Create; } static internal EntityDataSourceQueryBuilder Create(DataSourceSelectArguments arguments, string commandText, ObjectParameter[] commandParameters, string whereExpression, ObjectParameter[] whereParameters, string entitySetQueryExpression, string selectExpression, string groupByExpression, ObjectParameter[] selectParameters, OrderByBuilder orderByBuilder, string includePaths) { return new EntityDataSourceObjectQueryBuilder (arguments, commandText, commandParameters, whereExpression, whereParameters, entitySetQueryExpression, selectExpression, groupByExpression, selectParameters, orderByBuilder, includePaths); } protected override ObjectQuery ApplySelect(ObjectQuery queryT) { return queryT; } } internal class EntityDataSourceRecordQueryBuilder : EntityDataSourceQueryBuilder { private readonly string _selectExpression; private readonly string _groupByExpression; private readonly ObjectParameter[] _selectParameters; private EntityDataSourceRecordQueryBuilder(DataSourceSelectArguments arguments, string commandText, ObjectParameter[] commandParameters, string whereExpression, ObjectParameter[] whereParameters, string entitySetQueryExpression, string selectExpression, string groupByExpression, ObjectParameter[] selectParameters, OrderByBuilder orderByBuilder, string includePaths) : base(arguments, commandText, commandParameters, whereExpression, whereParameters, entitySetQueryExpression, selectExpression, groupByExpression, selectParameters, orderByBuilder, includePaths) { _selectExpression = selectExpression; _groupByExpression = groupByExpression; _selectParameters = selectParameters; } static internal EntityDataSourceQueryBuilder Create(DataSourceSelectArguments arguments, string commandText, ObjectParameter[] commandParameters, string whereExpression, ObjectParameter[] whereParameters, string entitySetQueryExpression, string selectExpression, string groupByExpression, ObjectParameter[] selectParameters, OrderByBuilder orderByBuilder, string includePaths) { return new EntityDataSourceRecordQueryBuilder(arguments, commandText, commandParameters, whereExpression, whereParameters, entitySetQueryExpression, selectExpression, groupByExpression, selectParameters, orderByBuilder, includePaths); } protected override ObjectQuery ApplySelect(ObjectQuery queryT) { Debug.Assert(!String.IsNullOrEmpty(_selectExpression), "Select expression should not be of zero length."); if (!string.IsNullOrEmpty(_groupByExpression)) { queryT = queryT.GroupBy(_groupByExpression, _selectExpression, _selectParameters); } else { queryT = queryT.Select(_selectExpression, _selectParameters); } return queryT; } } internal static class QueryBuilderUtils { internal static readonly ObjectParameter[] EmptyObjectParameters = new ObjectParameter[] { }; internal static ObjectQuery ConstructQuery (ObjectContext context, string entitySetQueryExpression, string commandText, ObjectParameter[] commandParameters) { string queryExpression; ObjectParameter[] queryParameters; if (!string.IsNullOrEmpty(commandText)) { queryExpression = commandText; queryParameters = commandParameters; } else { queryExpression = entitySetQueryExpression; queryParameters = QueryBuilderUtils.EmptyObjectParameters; } return context.CreateQuery (queryExpression, queryParameters); } } } // 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
- DataViewListener.cs
- PersonalizationProviderHelper.cs
- DataSet.cs
- CodeDomDesignerLoader.cs
- OleDbException.cs
- WindowsListViewGroup.cs
- MenuItemBinding.cs
- MessageEncodingBindingElement.cs
- NetworkStream.cs
- CounterCreationData.cs
- XDRSchema.cs
- ToolStrip.cs
- RelationshipEndMember.cs
- CodeGenerator.cs
- BindingParameterCollection.cs
- KoreanLunisolarCalendar.cs
- COM2ExtendedUITypeEditor.cs
- RenderDataDrawingContext.cs
- UdpSocket.cs
- BinaryExpressionHelper.cs
- Section.cs
- SamlNameIdentifierClaimResource.cs
- WebRequestModuleElement.cs
- XNodeValidator.cs
- SelectedCellsChangedEventArgs.cs
- DiscoveryOperationContext.cs
- FixedHighlight.cs
- WorkerRequest.cs
- ConfigXmlElement.cs
- SurrogateDataContract.cs
- CodeComment.cs
- DataRowChangeEvent.cs
- NamedPermissionSet.cs
- TabPage.cs
- ConfigUtil.cs
- MatchingStyle.cs
- ZipIOExtraField.cs
- XmlProcessingInstruction.cs
- Enum.cs
- TimeZone.cs
- FakeModelItemImpl.cs
- StreamProxy.cs
- DictionarySectionHandler.cs
- EventItfInfo.cs
- NumberFormatInfo.cs
- PointAnimationUsingPath.cs
- FileNameEditor.cs
- ControlIdConverter.cs
- BindingContext.cs
- AssemblyNameProxy.cs
- MgmtConfigurationRecord.cs
- PipelineModuleStepContainer.cs
- VerticalAlignConverter.cs
- ExpressionVisitor.cs
- Operator.cs
- CleanUpVirtualizedItemEventArgs.cs
- TreeBuilderXamlTranslator.cs
- MarkupWriter.cs
- SecurityToken.cs
- DataGridColumnHeadersPresenter.cs
- DbConnectionClosed.cs
- SizeChangedEventArgs.cs
- Delegate.cs
- LayoutInformation.cs
- FirewallWrapper.cs
- LinkDescriptor.cs
- MatrixTransform.cs
- LinearGradientBrush.cs
- SqlDataReaderSmi.cs
- ProjectionCamera.cs
- SystemSounds.cs
- BooleanAnimationUsingKeyFrames.cs
- TrackBar.cs
- HttpModuleCollection.cs
- Animatable.cs
- ImpersonationContext.cs
- LicFileLicenseProvider.cs
- ProxyOperationRuntime.cs
- Itemizer.cs
- DashStyle.cs
- _emptywebproxy.cs
- TextParentUndoUnit.cs
- SmtpMail.cs
- DataGridHeaderBorder.cs
- IdentifierService.cs
- TreeView.cs
- DesignerDeviceConfig.cs
- TextModifier.cs
- Subtree.cs
- FixedSchema.cs
- SessionParameter.cs
- UInt32Storage.cs
- AttributeTable.cs
- EnumBuilder.cs
- WebBrowserNavigatingEventHandler.cs
- TextSelectionProcessor.cs
- DataControlButton.cs
- SystemIPInterfaceStatistics.cs
- CompressStream.cs
- FlowLayout.cs