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
- SafeArrayTypeMismatchException.cs
- AnnouncementInnerClientCD1.cs
- SqlRowUpdatingEvent.cs
- IItemProperties.cs
- DecoderReplacementFallback.cs
- GPPOINT.cs
- TransformCryptoHandle.cs
- EntityConnection.cs
- GenericUriParser.cs
- RunWorkerCompletedEventArgs.cs
- TiffBitmapEncoder.cs
- UidManager.cs
- JsonXmlDataContract.cs
- UniformGrid.cs
- BufferModesCollection.cs
- BulletedListEventArgs.cs
- DeviceSpecific.cs
- __ConsoleStream.cs
- XmlSchemaSubstitutionGroup.cs
- NullRuntimeConfig.cs
- TargetConverter.cs
- ArrayConverter.cs
- RecordBuilder.cs
- BitmapEffectCollection.cs
- SplitterDesigner.cs
- Scheduling.cs
- SerialPinChanges.cs
- DocumentSequenceHighlightLayer.cs
- RuntimeArgumentHandle.cs
- BooleanAnimationBase.cs
- FontFamily.cs
- WebConfigurationHostFileChange.cs
- GridViewItemAutomationPeer.cs
- AuthenticatedStream.cs
- AuthenticatedStream.cs
- SecurityTokenReferenceStyle.cs
- NativeObjectSecurity.cs
- ParameterModifier.cs
- LocatorPartList.cs
- _ChunkParse.cs
- DataSourceXmlTextReader.cs
- MimeParameterWriter.cs
- CalendarKeyboardHelper.cs
- Registry.cs
- CategoryAttribute.cs
- RichTextBox.cs
- DbProviderFactories.cs
- ResourcesChangeInfo.cs
- ExceptionTranslationTable.cs
- BufferModesCollection.cs
- VirtualPathProvider.cs
- ApplicationActivator.cs
- ObjectDisposedException.cs
- KeyMatchBuilder.cs
- cookieexception.cs
- LineServices.cs
- CharacterBufferReference.cs
- Event.cs
- ProfileEventArgs.cs
- MarkupObject.cs
- TdsRecordBufferSetter.cs
- BasicViewGenerator.cs
- DataGridLinkButton.cs
- UnknownWrapper.cs
- ColorComboBox.cs
- StackSpiller.cs
- PocoEntityKeyStrategy.cs
- SqlAliasesReferenced.cs
- OleDbFactory.cs
- CompModSwitches.cs
- OrderByExpression.cs
- Application.cs
- DesignerAttribute.cs
- ClientFormsAuthenticationCredentials.cs
- MembershipPasswordException.cs
- CommandHelper.cs
- DispatchChannelSink.cs
- ScrollPattern.cs
- DbConnectionPoolGroup.cs
- ExpressionBuilderCollection.cs
- BaseTemplateParser.cs
- CommentGlyph.cs
- GridSplitterAutomationPeer.cs
- ColumnBinding.cs
- GridItemPattern.cs
- InputBinder.cs
- FilterElement.cs
- ActivityValidator.cs
- EncoderParameter.cs
- DataSourceSelectArguments.cs
- TextEditorParagraphs.cs
- OdbcException.cs
- QueryStringParameter.cs
- AudioFileOut.cs
- AsmxEndpointPickerExtension.cs
- Attributes.cs
- Metafile.cs
- InstanceDataCollection.cs
- DataServiceQuery.cs
- LoginUtil.cs