Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ResizingMessageFilter.cs
- SafeFileHandle.cs
- QfeChecker.cs
- RegexCapture.cs
- BinHexDecoder.cs
- JobPageOrder.cs
- QueueException.cs
- RectAnimation.cs
- ThumbAutomationPeer.cs
- Size.cs
- RunWorkerCompletedEventArgs.cs
- ToolStripMenuItem.cs
- HMACMD5.cs
- AccessViolationException.cs
- BinaryUtilClasses.cs
- PerspectiveCamera.cs
- ping.cs
- TreeNodeSelectionProcessor.cs
- SymbolTable.cs
- Directory.cs
- SqlProviderServices.cs
- _LazyAsyncResult.cs
- WindowsTooltip.cs
- TypeUtil.cs
- FilteredDataSetHelper.cs
- AsymmetricSignatureDeformatter.cs
- TreeNode.cs
- WindowInteropHelper.cs
- StringFreezingAttribute.cs
- BinHexEncoder.cs
- WebPartZoneBase.cs
- CodeArgumentReferenceExpression.cs
- RoleManagerEventArgs.cs
- DesignerUtility.cs
- ConfigurationElementCollection.cs
- GridViewUpdateEventArgs.cs
- HttpDebugHandler.cs
- OptionUsage.cs
- DataConnectionHelper.cs
- GeometryGroup.cs
- RemoteHelper.cs
- AttributeCollection.cs
- DbTransaction.cs
- RightsManagementLicense.cs
- CalendarAutoFormatDialog.cs
- DmlSqlGenerator.cs
- SelectionService.cs
- OleDbException.cs
- RawAppCommandInputReport.cs
- StylusPoint.cs
- HttpCacheParams.cs
- SystemEvents.cs
- StubHelpers.cs
- XmlIgnoreAttribute.cs
- MethodBuilder.cs
- PlainXmlDeserializer.cs
- BrowserDefinition.cs
- XamlInt32CollectionSerializer.cs
- EntitySqlQueryState.cs
- TextRangeAdaptor.cs
- ProviderConnectionPoint.cs
- NativeMethods.cs
- DrawingState.cs
- ObsoleteAttribute.cs
- CodeGotoStatement.cs
- ProgressiveCrcCalculatingStream.cs
- Model3DCollection.cs
- SqlAliaser.cs
- StatusStrip.cs
- SplineKeyFrames.cs
- FixedSOMTable.cs
- HashJoinQueryOperatorEnumerator.cs
- ToolStripContainer.cs
- WebBrowser.cs
- CompressStream.cs
- DataGridItemCollection.cs
- HashAlgorithm.cs
- PathTooLongException.cs
- MetadataFile.cs
- InvokeHandlers.cs
- UrlMappingsModule.cs
- ExpressionCopier.cs
- MatchSingleFxEngineOpcode.cs
- PolyLineSegment.cs
- ActiveXHelper.cs
- _ListenerRequestStream.cs
- InfoCardRequestException.cs
- EmulateRecognizeCompletedEventArgs.cs
- ScrollEvent.cs
- XmlAttributeCollection.cs
- GridViewRowPresenterBase.cs
- RegistryPermission.cs
- FormsAuthenticationEventArgs.cs
- FlowNode.cs
- TreeNodeStyleCollection.cs
- FlowDocumentView.cs
- GlobalEventManager.cs
- EasingKeyFrames.cs
- XsltException.cs
- TakeOrSkipWhileQueryOperator.cs