Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlRemoveConstantOrderBy.cs / 1305376 / 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
- DictionaryEntry.cs
- SchemaExporter.cs
- COSERVERINFO.cs
- ListenerChannelContext.cs
- CodeComment.cs
- PersonalizationProviderCollection.cs
- Soap.cs
- ThousandthOfEmRealPoints.cs
- CornerRadius.cs
- CustomAttribute.cs
- iisPickupDirectory.cs
- OleDbConnection.cs
- QuaternionValueSerializer.cs
- IndentedWriter.cs
- InstanceStore.cs
- BuildProvider.cs
- DataRelation.cs
- SafeIUnknown.cs
- basevalidator.cs
- WebPartMenu.cs
- SqlProvider.cs
- HiddenFieldPageStatePersister.cs
- ErrorEventArgs.cs
- FunctionNode.cs
- ElementInit.cs
- DPAPIProtectedConfigurationProvider.cs
- CaretElement.cs
- FixedSchema.cs
- View.cs
- HTTP_SERVICE_CONFIG_URLACL_KEY.cs
- CompositeScriptReference.cs
- ObjectHandle.cs
- StreamHelper.cs
- SqlCachedBuffer.cs
- GroupQuery.cs
- DynamicDiscoveryDocument.cs
- SetterTriggerConditionValueConverter.cs
- CodeVariableDeclarationStatement.cs
- CompleteWizardStep.cs
- HyperLink.cs
- Viewport2DVisual3D.cs
- PriorityQueue.cs
- HttpWebRequestElement.cs
- ScrollProperties.cs
- Int64.cs
- DataKeyCollection.cs
- GlobalAllocSafeHandle.cs
- WebPartCancelEventArgs.cs
- Drawing.cs
- SecurityElement.cs
- ValidationEventArgs.cs
- DependencyPropertyChangedEventArgs.cs
- PerformanceCounterLib.cs
- CustomErrorsSectionWrapper.cs
- TouchDevice.cs
- DetailsViewRow.cs
- OracleEncoding.cs
- MediaPlayer.cs
- ApplicationActivator.cs
- SynchronizedDispatch.cs
- ApplicationSettingsBase.cs
- FlowPosition.cs
- SingleAnimation.cs
- WebPartTransformerCollection.cs
- TypedRowHandler.cs
- sortedlist.cs
- GeneratedView.cs
- ArgumentValueSerializer.cs
- DataGridViewCellPaintingEventArgs.cs
- TextRangeAdaptor.cs
- BufferedGraphicsContext.cs
- TypeDescriptionProvider.cs
- SqlNodeAnnotation.cs
- BitVec.cs
- DataReaderContainer.cs
- InkPresenterAutomationPeer.cs
- DBCommand.cs
- Cursor.cs
- WSSecurityOneDotOneSendSecurityHeader.cs
- AutomationPatternInfo.cs
- CodeTypeDelegate.cs
- XsltQilFactory.cs
- PersonalizationDictionary.cs
- XPathItem.cs
- RemoteWebConfigurationHost.cs
- HttpClientProtocol.cs
- SpellerError.cs
- ServiceDescriptionSerializer.cs
- TypeUtils.cs
- FormsAuthentication.cs
- AspNetHostingPermission.cs
- MsmqElementBase.cs
- TemplateManager.cs
- FastEncoder.cs
- InputScope.cs
- SettingsBase.cs
- XmlSchemaSimpleContentExtension.cs
- FontWeights.cs
- ConnectionManagementElement.cs
- UIPropertyMetadata.cs