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
- BindableTemplateBuilder.cs
- MultipartIdentifier.cs
- ProgressBarRenderer.cs
- DataGridViewSelectedRowCollection.cs
- XmlSchemaObject.cs
- ITreeGenerator.cs
- GraphicsState.cs
- QilExpression.cs
- QilChoice.cs
- EventDescriptor.cs
- Material.cs
- Point3DValueSerializer.cs
- DataControlFieldCell.cs
- SqlExpander.cs
- InputProviderSite.cs
- hresults.cs
- HttpWrapper.cs
- RangeValuePattern.cs
- Matrix3D.cs
- Stroke2.cs
- GenericPrincipal.cs
- LicenseManager.cs
- Scalars.cs
- NotifyInputEventArgs.cs
- CryptoHelper.cs
- Attributes.cs
- StsCommunicationException.cs
- MatrixValueSerializer.cs
- UnsafeNativeMethodsCLR.cs
- BamlResourceSerializer.cs
- CharStorage.cs
- followingsibling.cs
- StateDesignerConnector.cs
- util.cs
- ObjectAnimationUsingKeyFrames.cs
- D3DImage.cs
- MemberDomainMap.cs
- WorkflowInstanceAbortedRecord.cs
- SafeLibraryHandle.cs
- CategoryAttribute.cs
- ChameleonKey.cs
- CodeMemberProperty.cs
- ArraySegment.cs
- DependencyPropertyAttribute.cs
- ImageCodecInfo.cs
- ExceptionTrace.cs
- Matrix3DValueSerializer.cs
- Rethrow.cs
- StringValueConverter.cs
- FrameworkElementFactoryMarkupObject.cs
- ClientEndpointLoader.cs
- Stylus.cs
- VSWCFServiceContractGenerator.cs
- DbConnectionPool.cs
- InternalRelationshipCollection.cs
- HebrewCalendar.cs
- WmlLabelAdapter.cs
- CheckBoxField.cs
- XmlPropertyBag.cs
- Run.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- LinearQuaternionKeyFrame.cs
- LongValidator.cs
- SweepDirectionValidation.cs
- SelectionChangedEventArgs.cs
- Input.cs
- ClientEventManager.cs
- RequiredAttributeAttribute.cs
- SafePEFileHandle.cs
- StatusBar.cs
- TextRange.cs
- DetailsView.cs
- EntityConnection.cs
- FormViewUpdateEventArgs.cs
- WebPartMenu.cs
- DetailsViewInsertedEventArgs.cs
- AtlasWeb.Designer.cs
- DynamicDataRoute.cs
- DbConnectionClosed.cs
- XappLauncher.cs
- FileVersion.cs
- NamedPipeConnectionPool.cs
- TabItemWrapperAutomationPeer.cs
- GeneralTransform3DTo2D.cs
- SqlCommandBuilder.cs
- ReadContentAsBinaryHelper.cs
- DataGridViewRowCollection.cs
- ScriptingProfileServiceSection.cs
- RegistryDataKey.cs
- DataGridViewCellConverter.cs
- QuotedPrintableStream.cs
- ValidatorCompatibilityHelper.cs
- WebPartMenuStyle.cs
- StyleModeStack.cs
- XhtmlCssHandler.cs
- DbParameterCollectionHelper.cs
- PeerNameRecordCollection.cs
- RichTextBoxConstants.cs
- ProfilePropertySettings.cs
- ChildTable.cs