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
- OracleDataAdapter.cs
- _ConnectionGroup.cs
- sitestring.cs
- BooleanFunctions.cs
- LineServicesRun.cs
- unsafenativemethodstextservices.cs
- MarkupCompiler.cs
- TextClipboardData.cs
- CodeMemberProperty.cs
- WindowPatternIdentifiers.cs
- LinqDataSource.cs
- CompilerParameters.cs
- AbsoluteQuery.cs
- DataTableCollection.cs
- ScriptReferenceEventArgs.cs
- StringAnimationUsingKeyFrames.cs
- DocumentViewerHelper.cs
- Size3D.cs
- AppDomainProtocolHandler.cs
- DataException.cs
- HexParser.cs
- WebResponse.cs
- DataServiceContext.cs
- _IPv6Address.cs
- CompModSwitches.cs
- DefaultBindingPropertyAttribute.cs
- DbgCompiler.cs
- ArrayElementGridEntry.cs
- EventLogPermission.cs
- RenderingEventArgs.cs
- GiveFeedbackEventArgs.cs
- Win32KeyboardDevice.cs
- ReadOnlyDataSource.cs
- _WebProxyDataBuilder.cs
- ForEachAction.cs
- IChannel.cs
- BaseCodePageEncoding.cs
- StringToken.cs
- SplashScreenNativeMethods.cs
- QueryReaderSettings.cs
- SettingsProperty.cs
- CharacterBuffer.cs
- XmlTextReaderImpl.cs
- RotationValidation.cs
- BidOverLoads.cs
- ExceptionUtil.cs
- TextSpanModifier.cs
- FilterQueryOptionExpression.cs
- DiffuseMaterial.cs
- PenLineJoinValidation.cs
- DPCustomTypeDescriptor.cs
- Throw.cs
- TextEvent.cs
- PreviewPageInfo.cs
- NumericPagerField.cs
- FullTextState.cs
- RadialGradientBrush.cs
- TimerElapsedEvenArgs.cs
- DelegateSerializationHolder.cs
- CustomAssemblyResolver.cs
- Vector3DCollectionConverter.cs
- NamespaceTable.cs
- ScriptModule.cs
- UpWmlPageAdapter.cs
- MenuAdapter.cs
- DotNetATv1WindowsLogEntrySerializer.cs
- RuleInfoComparer.cs
- SimpleWebHandlerParser.cs
- PolyLineSegmentFigureLogic.cs
- DbConnectionPool.cs
- WsatConfiguration.cs
- FixedSOMLineRanges.cs
- DrawingVisualDrawingContext.cs
- XmlSchemaAnnotated.cs
- Models.cs
- ClientSideProviderDescription.cs
- FontEmbeddingManager.cs
- SHA384CryptoServiceProvider.cs
- ToolStripItemBehavior.cs
- OrderedHashRepartitionEnumerator.cs
- MouseActionConverter.cs
- ToolStripArrowRenderEventArgs.cs
- categoryentry.cs
- SqlFileStream.cs
- TypeLibraryHelper.cs
- HttpBindingExtension.cs
- WsatAdminException.cs
- LockRecoveryTask.cs
- ButtonBaseAdapter.cs
- CompilerTypeWithParams.cs
- DbReferenceCollection.cs
- PathFigure.cs
- SID.cs
- RichTextBox.cs
- OdbcErrorCollection.cs
- ProgressBarHighlightConverter.cs
- SQLResource.cs
- ParameterSubsegment.cs
- Privilege.cs
- WebPartEventArgs.cs