Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlRemoveConstantOrderBy.cs / 1305376 / 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
- DataRowExtensions.cs
- Span.cs
- TypefaceMetricsCache.cs
- HtmlPanelAdapter.cs
- CodeGenerator.cs
- HopperCache.cs
- ExternalCalls.cs
- StrongNameUtility.cs
- SafeNativeMethods.cs
- MorphHelper.cs
- TCEAdapterGenerator.cs
- DataBoundLiteralControl.cs
- EmptyStringExpandableObjectConverter.cs
- EmbeddedObject.cs
- HandleTable.cs
- XmlElement.cs
- AnchoredBlock.cs
- ApplicationId.cs
- BStrWrapper.cs
- Convert.cs
- VideoDrawing.cs
- PeerMaintainer.cs
- GridItemPattern.cs
- RelationHandler.cs
- Matrix3D.cs
- GifBitmapDecoder.cs
- SystemIPGlobalProperties.cs
- MetabaseReader.cs
- CodeAccessPermission.cs
- SqlConnectionHelper.cs
- TextMarkerSource.cs
- ObjectListDataBindEventArgs.cs
- TreeNodeCollection.cs
- ObjectView.cs
- Calendar.cs
- StrokeNode.cs
- EventSinkHelperWriter.cs
- FlowDocumentFormatter.cs
- WebControlParameterProxy.cs
- FilterElement.cs
- HttpConfigurationContext.cs
- TrustLevelCollection.cs
- RSAOAEPKeyExchangeFormatter.cs
- ClientFormsAuthenticationMembershipProvider.cs
- CacheSection.cs
- EventQueueState.cs
- EntityDataSourceSelectedEventArgs.cs
- ThousandthOfEmRealDoubles.cs
- WindowsIdentity.cs
- WmlListAdapter.cs
- MsmqProcessProtocolHandler.cs
- NamespaceMapping.cs
- TextTreeExtractElementUndoUnit.cs
- WebServiceData.cs
- XmlMtomWriter.cs
- ConstNode.cs
- DebuggerAttributes.cs
- MSAAEventDispatcher.cs
- FragmentNavigationEventArgs.cs
- EmptyControlCollection.cs
- CodePageEncoding.cs
- CompensateDesigner.cs
- ScrollItemPattern.cs
- _ListenerAsyncResult.cs
- BStrWrapper.cs
- EpmCustomContentWriterNodeData.cs
- SchemeSettingElementCollection.cs
- PrimitiveSchema.cs
- StylusSystemGestureEventArgs.cs
- DataGridCommandEventArgs.cs
- ContentTextAutomationPeer.cs
- MetadataAssemblyHelper.cs
- ClusterRegistryConfigurationProvider.cs
- RemoteWebConfigurationHostStream.cs
- DocumentGridPage.cs
- DataKeyCollection.cs
- IntSecurity.cs
- UserInitiatedNavigationPermission.cs
- DataGridViewCellStyleChangedEventArgs.cs
- Screen.cs
- Int64AnimationUsingKeyFrames.cs
- ApplicationServiceHelper.cs
- TypeConverterHelper.cs
- FontFamily.cs
- ApplicationId.cs
- SHA1CryptoServiceProvider.cs
- RangeValuePatternIdentifiers.cs
- OdbcFactory.cs
- CatalogZoneBase.cs
- VectorCollectionConverter.cs
- VerticalAlignConverter.cs
- TextTreeExtractElementUndoUnit.cs
- WebConfigurationManager.cs
- SQLStringStorage.cs
- InternalConfigSettingsFactory.cs
- MDIClient.cs
- __ConsoleStream.cs
- LogRecordSequence.cs
- BitVector32.cs
- Keyboard.cs