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
- PropertyFilterAttribute.cs
- EntityModelSchemaGenerator.cs
- EncryptedData.cs
- COM2ColorConverter.cs
- DispatcherTimer.cs
- DataError.cs
- SmiTypedGetterSetter.cs
- ImageMetadata.cs
- ObservableDictionary.cs
- ChildrenQuery.cs
- LabelExpression.cs
- RangeBase.cs
- InterleavedZipPartStream.cs
- VoiceInfo.cs
- XmlQualifiedName.cs
- CqlParserHelpers.cs
- DefaultSerializationProviderAttribute.cs
- IWorkflowDebuggerService.cs
- SqlClientWrapperSmiStreamChars.cs
- WindowsRichEditRange.cs
- WindowsRegion.cs
- WebPartTracker.cs
- OrderByBuilder.cs
- Missing.cs
- SqlTypeSystemProvider.cs
- itemelement.cs
- SqlInternalConnection.cs
- UrlPath.cs
- userdatakeys.cs
- Console.cs
- SymbolEqualComparer.cs
- ConcurrentBag.cs
- _Rfc2616CacheValidators.cs
- NavigationEventArgs.cs
- BitmapFrame.cs
- IOException.cs
- XmlAttributes.cs
- Int64Storage.cs
- ListQueryResults.cs
- DateTimePickerDesigner.cs
- SendDesigner.xaml.cs
- MessageDecoder.cs
- WarningException.cs
- StateWorkerRequest.cs
- MasterPage.cs
- BooleanStorage.cs
- bidPrivateBase.cs
- MatrixTransform3D.cs
- HwndSource.cs
- RunClient.cs
- DropShadowBitmapEffect.cs
- BitmapFrameEncode.cs
- PathData.cs
- ErrorReporting.cs
- PropertyTabChangedEvent.cs
- LayoutInformation.cs
- PlainXmlDeserializer.cs
- OledbConnectionStringbuilder.cs
- EventLogConfiguration.cs
- RouteParser.cs
- CellPartitioner.cs
- FlowLayoutPanel.cs
- PasswordDeriveBytes.cs
- ConfigurationSectionHelper.cs
- XPathExpr.cs
- TdsRecordBufferSetter.cs
- Rotation3DAnimation.cs
- DiscoveryCallbackBehavior.cs
- ExpressionCopier.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- DebugControllerThread.cs
- MembershipValidatePasswordEventArgs.cs
- ComponentEditorPage.cs
- SoapException.cs
- ApplicationSecurityManager.cs
- FieldNameLookup.cs
- ErrorWebPart.cs
- AnimatedTypeHelpers.cs
- NullExtension.cs
- JapaneseLunisolarCalendar.cs
- ColumnHeaderCollectionEditor.cs
- CachedBitmap.cs
- SiteMapDataSource.cs
- CustomAttribute.cs
- RawStylusSystemGestureInputReport.cs
- DiscoveryClientBindingElement.cs
- DrawingBrush.cs
- DrawingContextFlattener.cs
- ToggleButton.cs
- ImageMapEventArgs.cs
- CancellationHandlerDesigner.cs
- MultiAsyncResult.cs
- recordstate.cs
- SslStream.cs
- DataServiceQueryOfT.cs
- DataGridComponentEditor.cs
- UTF32Encoding.cs
- LinkArea.cs
- XmlPreloadedResolver.cs
- ExpressionPrinter.cs