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
- DataBoundControlAdapter.cs
- HWStack.cs
- GeneralTransform3D.cs
- SoapAttributes.cs
- TextContainer.cs
- DATA_BLOB.cs
- StateFinalizationDesigner.cs
- CodeTypeOfExpression.cs
- SchemaExporter.cs
- HtmlFormWrapper.cs
- _IPv4Address.cs
- PickBranchDesigner.xaml.cs
- ProfessionalColorTable.cs
- BitmapFrame.cs
- ProviderSettings.cs
- StylusButton.cs
- ExtenderProviderService.cs
- IndependentAnimationStorage.cs
- WorkflowRuntimeService.cs
- HMACSHA512.cs
- SafeMILHandle.cs
- RTTypeWrapper.cs
- AdornedElementPlaceholder.cs
- InfoCardClaimCollection.cs
- PathNode.cs
- MiniMapControl.xaml.cs
- MatrixValueSerializer.cs
- ResourceProviderFactory.cs
- CrossContextChannel.cs
- ActivationArguments.cs
- BatchWriter.cs
- BinaryObjectWriter.cs
- webeventbuffer.cs
- PathFigureCollectionConverter.cs
- XmlSchemaValidator.cs
- ReadContentAsBinaryHelper.cs
- ValidatorCompatibilityHelper.cs
- FontInfo.cs
- GridView.cs
- RenderTargetBitmap.cs
- BitmapCodecInfoInternal.cs
- ContainerParagraph.cs
- Soap12ProtocolReflector.cs
- PieceNameHelper.cs
- rsa.cs
- SecurityTokenProvider.cs
- XhtmlBasicLiteralTextAdapter.cs
- SqlClientPermission.cs
- EntityDataSourceChangingEventArgs.cs
- WindowsAltTab.cs
- ImageListImage.cs
- C14NUtil.cs
- SingleObjectCollection.cs
- DataGridViewRowEventArgs.cs
- JsonByteArrayDataContract.cs
- XmlSchemaSimpleContentRestriction.cs
- RandomNumberGenerator.cs
- SlipBehavior.cs
- CalendarDateChangedEventArgs.cs
- WebPartAuthorizationEventArgs.cs
- RtfNavigator.cs
- CodeRegionDirective.cs
- TextEditorTyping.cs
- DecimalKeyFrameCollection.cs
- FilePresentation.cs
- SharedPersonalizationStateInfo.cs
- CodeAssignStatement.cs
- LazyInitializer.cs
- graph.cs
- Decoder.cs
- UriWriter.cs
- ColumnHeader.cs
- SqlDataSourceQueryConverter.cs
- CalendarTable.cs
- SqlParameterCollection.cs
- TextParagraphCache.cs
- WindowsMenu.cs
- ParseHttpDate.cs
- RC2CryptoServiceProvider.cs
- TextLine.cs
- securitycriticaldata.cs
- COMException.cs
- StatusBarItemAutomationPeer.cs
- PropertyMap.cs
- ViewValidator.cs
- Encoder.cs
- GroupBoxAutomationPeer.cs
- ChannelServices.cs
- LineGeometry.cs
- NoneExcludedImageIndexConverter.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- UIElement.cs
- BindingOperations.cs
- RoutingTable.cs
- DataListItemEventArgs.cs
- ClientConfigurationHost.cs
- Rules.cs
- GridToolTip.cs
- SqlTypesSchemaImporter.cs
- RoleService.cs