Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- OdbcParameterCollection.cs
- HttpApplication.cs
- BamlLocalizableResourceKey.cs
- RuntimeConfigLKG.cs
- WindowsScrollBar.cs
- ApplicationInfo.cs
- ValueUnavailableException.cs
- ButtonFlatAdapter.cs
- MenuItemCollection.cs
- HttpChannelBindingToken.cs
- BitmapEffect.cs
- TraceContextEventArgs.cs
- FixedPageAutomationPeer.cs
- Int32CAMarshaler.cs
- CodeGen.cs
- ListViewUpdatedEventArgs.cs
- ObjectList.cs
- DeclarativeCatalogPart.cs
- PartialList.cs
- HwndMouseInputProvider.cs
- MissingSatelliteAssemblyException.cs
- ColumnMap.cs
- DoubleSumAggregationOperator.cs
- CodeEventReferenceExpression.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- NgenServicingAttributes.cs
- GroupItem.cs
- Pair.cs
- DataGridViewLinkCell.cs
- WebPartMenu.cs
- RelationshipDetailsRow.cs
- ContextMenuStripGroup.cs
- WebPartPersonalization.cs
- BamlResourceContent.cs
- BufferAllocator.cs
- XmlnsDefinitionAttribute.cs
- ItemCollection.cs
- ExportOptions.cs
- ContextDataSource.cs
- BaseCollection.cs
- DocumentViewerBaseAutomationPeer.cs
- XmlAutoDetectWriter.cs
- ContextInformation.cs
- OleDbConnectionInternal.cs
- SamlAdvice.cs
- ClientRoleProvider.cs
- SynchronizationLockException.cs
- AppDomainManager.cs
- XmlBinaryWriter.cs
- ReadOnlyHierarchicalDataSource.cs
- KerberosSecurityTokenAuthenticator.cs
- WinEventHandler.cs
- InternalReceiveMessage.cs
- PerfService.cs
- LinkButton.cs
- TreeNodeCollection.cs
- DataMemberConverter.cs
- EntityWrapper.cs
- CalendarDesigner.cs
- CodeEventReferenceExpression.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- Permission.cs
- PropertyCondition.cs
- SqlNotificationRequest.cs
- DataContext.cs
- FieldToken.cs
- KnownColorTable.cs
- UnsafeNativeMethods.cs
- ObjectSecurity.cs
- HttpRequest.cs
- SelectingProviderEventArgs.cs
- SoapFormatterSinks.cs
- AnnotationResourceCollection.cs
- ThumbButtonInfoCollection.cs
- SystemIPv4InterfaceProperties.cs
- TextBox.cs
- SafeThreadHandle.cs
- DataGridViewDataConnection.cs
- AmbientLight.cs
- login.cs
- PerformanceCounterPermissionEntryCollection.cs
- XPathSelectionIterator.cs
- StructuralType.cs
- QueryAccessibilityHelpEvent.cs
- QueryStringParameter.cs
- CompilationUtil.cs
- NativeActivityAbortContext.cs
- WpfPayload.cs
- InvokeBase.cs
- QilCloneVisitor.cs
- _ConnectionGroup.cs
- ParameterInfo.cs
- FileInfo.cs
- PerfCounters.cs
- CommandExpr.cs
- XmlTextWriter.cs
- DebugView.cs
- DataControlPagerLinkButton.cs
- ValueType.cs
- ChangeDirector.cs