Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- FileUtil.cs
- ZipIOCentralDirectoryBlock.cs
- Timer.cs
- XslAst.cs
- FloatAverageAggregationOperator.cs
- AssociationSetMetadata.cs
- JsonMessageEncoderFactory.cs
- HandlerBase.cs
- Events.cs
- _SafeNetHandles.cs
- CapabilitiesSection.cs
- BasicDesignerLoader.cs
- DbConvert.cs
- ShaperBuffers.cs
- MD5CryptoServiceProvider.cs
- Calendar.cs
- QueryOptionExpression.cs
- XamlTypeMapper.cs
- LoginDesigner.cs
- ElementAtQueryOperator.cs
- XmlNodeChangedEventManager.cs
- UnsignedPublishLicense.cs
- BinaryFormatter.cs
- WrappedIUnknown.cs
- Clock.cs
- MsmqReceiveParameters.cs
- EntityRecordInfo.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- ShaperBuffers.cs
- WindowsScrollBar.cs
- PropertyDescriptorCollection.cs
- TableLayoutCellPaintEventArgs.cs
- DataSpaceManager.cs
- DataObject.cs
- Variable.cs
- FontSourceCollection.cs
- ExceptionRoutedEventArgs.cs
- DataBindingHandlerAttribute.cs
- ListItemViewAttribute.cs
- ListViewInsertionMark.cs
- UntypedNullExpression.cs
- EnumerableCollectionView.cs
- SortDescriptionCollection.cs
- WebBrowserPermission.cs
- SystemBrushes.cs
- PreProcessor.cs
- DateTimeFormatInfo.cs
- CompositeFontParser.cs
- RequestCachingSection.cs
- AssertUtility.cs
- SqlConnectionString.cs
- WindowsHyperlink.cs
- RealizationDrawingContextWalker.cs
- Roles.cs
- TransactionsSectionGroup.cs
- EntityDataSourceContextDisposingEventArgs.cs
- StringDictionaryWithComparer.cs
- RadioButton.cs
- ClientTargetSection.cs
- ExcCanonicalXml.cs
- XmlNodeChangedEventManager.cs
- Vector3DCollection.cs
- XmlAnyElementAttributes.cs
- PropagationProtocolsTracing.cs
- BaseDataList.cs
- NotFiniteNumberException.cs
- Gdiplus.cs
- ConnectionManagementElement.cs
- SQLBytesStorage.cs
- RuleSetDialog.cs
- FocusChangedEventArgs.cs
- BatchServiceHost.cs
- WbmpConverter.cs
- IndividualDeviceConfig.cs
- Vector3DAnimationUsingKeyFrames.cs
- JsonFormatWriterGenerator.cs
- ActivationServices.cs
- TableCellCollection.cs
- ConsumerConnectionPointCollection.cs
- RenderData.cs
- PenThreadPool.cs
- XmlSchemaAppInfo.cs
- RuleValidation.cs
- COM2IPerPropertyBrowsingHandler.cs
- ValueUnavailableException.cs
- DirectoryInfo.cs
- WeakReadOnlyCollection.cs
- ConnectionPool.cs
- SqlUdtInfo.cs
- ScopeCollection.cs
- SpecularMaterial.cs
- QueryOpeningEnumerator.cs
- CredentialSelector.cs
- BinaryNode.cs
- TimeZone.cs
- BufferAllocator.cs
- PackageStore.cs
- ContainerControl.cs
- EnumConverter.cs
- IdlingCommunicationPool.cs