Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlRemoveConstantOrderBy.cs / 1 / SqlRemoveConstantOrderBy.cs
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Data; namespace System.Data.Linq.SqlClient { using System.Data.Linq; ////// SQL doesn't allow constants in ORDER BY. /// /// Worse, an integer constant greater than 0 is treated as ORDER BY ProjectionColumn[i] so the results /// can be unexpected. /// /// The LINQ semantic for OrderBy(o=>constant) is for it to have no effect on the ordering. We enforce /// that semantic here by removing all constant columns from OrderBy. /// internal class SqlRemoveConstantOrderBy { private class Visitor : SqlVisitor { internal override SqlSelect VisitSelect(SqlSelect select) { int i = 0; Listorders = select.OrderBy; while (i < orders.Count) { SqlExpression expr = orders[i].Expression; while (expr.NodeType == SqlNodeType.DiscriminatedType) { expr = ((SqlDiscriminatedType)expr).Discriminator; } switch (expr.NodeType) { case SqlNodeType.Value: case SqlNodeType.Parameter: orders.RemoveAt(i); break; default: ++i; break; } } return base.VisitSelect(select); } } /// /// Remove relative constants from OrderBy. /// internal static SqlNode Remove(SqlNode node) { return new Visitor().Visit(node); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Data; namespace System.Data.Linq.SqlClient { using System.Data.Linq; ////// SQL doesn't allow constants in ORDER BY. /// /// Worse, an integer constant greater than 0 is treated as ORDER BY ProjectionColumn[i] so the results /// can be unexpected. /// /// The LINQ semantic for OrderBy(o=>constant) is for it to have no effect on the ordering. We enforce /// that semantic here by removing all constant columns from OrderBy. /// internal class SqlRemoveConstantOrderBy { private class Visitor : SqlVisitor { internal override SqlSelect VisitSelect(SqlSelect select) { int i = 0; Listorders = select.OrderBy; while (i < orders.Count) { SqlExpression expr = orders[i].Expression; while (expr.NodeType == SqlNodeType.DiscriminatedType) { expr = ((SqlDiscriminatedType)expr).Discriminator; } switch (expr.NodeType) { case SqlNodeType.Value: case SqlNodeType.Parameter: orders.RemoveAt(i); break; default: ++i; break; } } return base.VisitSelect(select); } } /// /// Remove relative constants from OrderBy. /// internal static SqlNode Remove(SqlNode node) { return new Visitor().Visit(node); } } } // 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
- unsafenativemethodstextservices.cs
- Convert.cs
- Effect.cs
- WebExceptionStatus.cs
- GPPOINTF.cs
- DoubleAnimationBase.cs
- BinaryObjectWriter.cs
- CommonRemoteMemoryBlock.cs
- ResourceDictionaryCollection.cs
- SqlXml.cs
- CommonProperties.cs
- StorageRoot.cs
- HotSpot.cs
- GlyphRunDrawing.cs
- PathSegment.cs
- TimerElapsedEvenArgs.cs
- AttributedMetaModel.cs
- TextEditorTyping.cs
- Peer.cs
- EFColumnProvider.cs
- RootProfilePropertySettingsCollection.cs
- CompilerWrapper.cs
- SqlProvider.cs
- ColumnBinding.cs
- SmtpReplyReader.cs
- XhtmlBasicListAdapter.cs
- ResourceAttributes.cs
- DbProviderFactories.cs
- DbMetaDataCollectionNames.cs
- lengthconverter.cs
- AutoGeneratedField.cs
- SafeSerializationManager.cs
- WebSysDisplayNameAttribute.cs
- AnnotationHelper.cs
- EditingCommands.cs
- PrintingPermissionAttribute.cs
- QueryContinueDragEventArgs.cs
- Container.cs
- XsltContext.cs
- RouteData.cs
- ProgressPage.cs
- ContextQuery.cs
- RegexCharClass.cs
- CodeTryCatchFinallyStatement.cs
- ServiceEndpoint.cs
- Debug.cs
- DataBoundControlDesigner.cs
- SemanticBasicElement.cs
- XmlStreamStore.cs
- Property.cs
- RightsManagementInformation.cs
- SessionStateUtil.cs
- OdbcCommand.cs
- XmlBinaryReaderSession.cs
- DefaultPrintController.cs
- XmlQuerySequence.cs
- CatalogZoneDesigner.cs
- ConfigurationErrorsException.cs
- DataControlFieldHeaderCell.cs
- EventPropertyMap.cs
- translator.cs
- QueryCursorEventArgs.cs
- OleStrCAMarshaler.cs
- UriTemplateHelpers.cs
- Debug.cs
- SpinLock.cs
- PreparingEnlistment.cs
- HebrewNumber.cs
- GrammarBuilderBase.cs
- StateMachineExecutionState.cs
- SerializationHelper.cs
- Pipe.cs
- ViewEvent.cs
- DataGridViewSelectedRowCollection.cs
- ContextConfiguration.cs
- ButtonChrome.cs
- IOThreadTimer.cs
- NotificationContext.cs
- Int64.cs
- ConfigXmlText.cs
- PageWrapper.cs
- NullableBoolConverter.cs
- UniformGrid.cs
- SqlDataSourceCommandEventArgs.cs
- DesignOnlyAttribute.cs
- SrgsSubset.cs
- FontStretches.cs
- SiteMapNode.cs
- ProfileGroupSettings.cs
- TraceHandlerErrorFormatter.cs
- DefaultTextStoreTextComposition.cs
- sqlcontext.cs
- PreviewKeyDownEventArgs.cs
- GridViewItemAutomationPeer.cs
- CompoundFileDeflateTransform.cs
- AutoResizedEvent.cs
- Types.cs
- SystemIPAddressInformation.cs
- ConnectionPointCookie.cs
- OdbcFactory.cs