Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AnnouncementDispatcherAsyncResult.cs
- HtmlInputCheckBox.cs
- UICuesEvent.cs
- Cursors.cs
- DeclaredTypeElement.cs
- RequestQueue.cs
- NotificationContext.cs
- TrustSection.cs
- ResolveNameEventArgs.cs
- XmlNodeWriter.cs
- DataControlFieldCollection.cs
- basevalidator.cs
- FlowDocumentPageViewerAutomationPeer.cs
- PropertyIDSet.cs
- ContentTextAutomationPeer.cs
- AssemblyCollection.cs
- BinaryWriter.cs
- EntitySqlException.cs
- EntityWrapper.cs
- ListDictionaryInternal.cs
- SkipQueryOptionExpression.cs
- ReplacementText.cs
- XmlReflectionImporter.cs
- ReadOnlyMetadataCollection.cs
- COM2EnumConverter.cs
- ThreadBehavior.cs
- QueryCacheKey.cs
- OdbcFactory.cs
- SyndicationPerson.cs
- SoapElementAttribute.cs
- ErrorHandler.cs
- XmlWriterTraceListener.cs
- ReferenceCountedObject.cs
- UriTemplateCompoundPathSegment.cs
- VectorValueSerializer.cs
- UnmanagedHandle.cs
- ViewBox.cs
- XPathDescendantIterator.cs
- HttpInputStream.cs
- SessionMode.cs
- SpotLight.cs
- DataRecordObjectView.cs
- DataContext.cs
- CompositeActivityDesigner.cs
- ChtmlPhoneCallAdapter.cs
- DataContract.cs
- SystemIPGlobalProperties.cs
- TraceSection.cs
- Message.cs
- SafeLibraryHandle.cs
- InkSerializer.cs
- ServiceProviders.cs
- DataGridViewCheckBoxCell.cs
- EmptyQuery.cs
- PrimitiveOperationFormatter.cs
- InvokeHandlers.cs
- ScriptHandlerFactory.cs
- KeyGesture.cs
- RewritingValidator.cs
- BuildProvidersCompiler.cs
- SafePEFileHandle.cs
- SqlRowUpdatedEvent.cs
- ErrorRuntimeConfig.cs
- QilXmlReader.cs
- ToolBarButtonClickEvent.cs
- RoutedEventValueSerializer.cs
- ImageMap.cs
- xmlfixedPageInfo.cs
- StrongNameIdentityPermission.cs
- XmlSerializerAssemblyAttribute.cs
- BezierSegment.cs
- FontWeights.cs
- Automation.cs
- CipherData.cs
- ColorMap.cs
- precedingsibling.cs
- _NtlmClient.cs
- DataColumnChangeEvent.cs
- TextServicesCompartmentContext.cs
- RichTextBoxDesigner.cs
- PrintDialog.cs
- SystemResourceHost.cs
- SqlErrorCollection.cs
- IconConverter.cs
- Splitter.cs
- X509PeerCertificateElement.cs
- ActivityExecutorSurrogate.cs
- EventLogPermissionEntry.cs
- XmlSchemaObjectCollection.cs
- WebBrowserNavigatingEventHandler.cs
- ValueTable.cs
- LifetimeServices.cs
- AspNetSynchronizationContext.cs
- MapPathBasedVirtualPathProvider.cs
- EventLogPermissionEntry.cs
- DBPropSet.cs
- QueryContinueDragEventArgs.cs
- CompiledQueryCacheKey.cs
- FilterEventArgs.cs
- PerformanceCounterLib.cs