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
- BuildResult.cs
- DataGridColumnCollection.cs
- DataGridRowsPresenter.cs
- XamlVector3DCollectionSerializer.cs
- XamlSerializerUtil.cs
- HttpVersion.cs
- DecimalConverter.cs
- ObjectQueryState.cs
- WorkflowRuntimeService.cs
- InstanceOwnerException.cs
- CompilationRelaxations.cs
- SQLDecimal.cs
- SelectionEditor.cs
- Bold.cs
- GetUserPreferenceRequest.cs
- ListContractAdapter.cs
- InheritanceService.cs
- PathStreamGeometryContext.cs
- TimeSpanConverter.cs
- TextBox.cs
- UnionCodeGroup.cs
- CodeObjectCreateExpression.cs
- StringReader.cs
- EnumCodeDomSerializer.cs
- Matrix.cs
- XpsColorContext.cs
- WebSysDefaultValueAttribute.cs
- RootCodeDomSerializer.cs
- MimeTypeMapper.cs
- Dictionary.cs
- AllowedAudienceUriElementCollection.cs
- WorkflowItemsPresenter.cs
- RootProfilePropertySettingsCollection.cs
- XmlCountingReader.cs
- ComponentFactoryHelpers.cs
- DefaultMemberAttribute.cs
- CodeAttachEventStatement.cs
- _TransmitFileOverlappedAsyncResult.cs
- WebPartManagerInternals.cs
- ToolStripPanelDesigner.cs
- Polyline.cs
- TextTreePropertyUndoUnit.cs
- RootBuilder.cs
- SQLStringStorage.cs
- FamilyTypeface.cs
- AsyncPostBackErrorEventArgs.cs
- MutexSecurity.cs
- ContentPlaceHolder.cs
- DocumentsTrace.cs
- SecurityTokenResolver.cs
- ZipIOCentralDirectoryBlock.cs
- MSAANativeProvider.cs
- AssemblyInfo.cs
- BuildProviderUtils.cs
- MsmqInputChannelListenerBase.cs
- AttributeConverter.cs
- BufferModeSettings.cs
- SqlInternalConnectionTds.cs
- UdpDiscoveryMessageFilter.cs
- CursorConverter.cs
- SmtpAuthenticationManager.cs
- ImageBrush.cs
- ListChangedEventArgs.cs
- UrlParameterReader.cs
- MetadataExchangeClient.cs
- OperationContractGenerationContext.cs
- _UriTypeConverter.cs
- HierarchicalDataTemplate.cs
- DataPager.cs
- HybridDictionary.cs
- PageCatalogPart.cs
- MimeObjectFactory.cs
- DeploymentSectionCache.cs
- MetricEntry.cs
- XmlConvert.cs
- CallbackTimeoutsElement.cs
- PTUtility.cs
- XslAst.cs
- DataGridViewRowsRemovedEventArgs.cs
- Msec.cs
- DefaultPropertyAttribute.cs
- SqlDataSourceSummaryPanel.cs
- DirectoryRootQuery.cs
- WebPartPersonalization.cs
- ConfigurationSectionHelper.cs
- HtmlInputButton.cs
- DataGridViewCellParsingEventArgs.cs
- TablePattern.cs
- CounterSample.cs
- ConnectionAcceptor.cs
- WebControlsSection.cs
- FusionWrap.cs
- PackWebResponse.cs
- ByteViewer.cs
- NonBatchDirectoryCompiler.cs
- PathSegmentCollection.cs
- AuthenticationModuleElement.cs
- PassportPrincipal.cs
- AudioFormatConverter.cs
- HotSpotCollection.cs