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
- Gdiplus.cs
- HttpRuntime.cs
- UnionQueryOperator.cs
- AsymmetricSignatureDeformatter.cs
- SqlMethods.cs
- AnimatedTypeHelpers.cs
- RuntimeResourceSet.cs
- JsonFaultDetail.cs
- CapabilitiesAssignment.cs
- DispatchWrapper.cs
- FragmentQuery.cs
- BitmapEffectState.cs
- NativeMethods.cs
- PropertyDescriptorGridEntry.cs
- ToolboxItemFilterAttribute.cs
- DataControlFieldCollection.cs
- EventSetterHandlerConverter.cs
- EditingCoordinator.cs
- CqlLexerHelpers.cs
- GridViewCellAutomationPeer.cs
- Material.cs
- MessageRpc.cs
- SystemFonts.cs
- XmlSchemaInfo.cs
- DataGridViewCellLinkedList.cs
- QilName.cs
- ArglessEventHandlerProxy.cs
- WebPartUserCapability.cs
- ScriptResourceHandler.cs
- StylusSystemGestureEventArgs.cs
- ConstructorBuilder.cs
- DetailsViewUpdateEventArgs.cs
- FixedPageStructure.cs
- PathFigure.cs
- IChannel.cs
- ObjectItemAttributeAssemblyLoader.cs
- TypedRowHandler.cs
- ConfigurationSettings.cs
- RichTextBoxConstants.cs
- PerformanceCounterLib.cs
- PaginationProgressEventArgs.cs
- SqlConnectionManager.cs
- EventItfInfo.cs
- ISAPIApplicationHost.cs
- SecurityKeyType.cs
- TextServicesDisplayAttribute.cs
- DocumentOrderComparer.cs
- XmlSchemaProviderAttribute.cs
- OrCondition.cs
- ConfigViewGenerator.cs
- RoutedEvent.cs
- ViewBase.cs
- CompositeTypefaceMetrics.cs
- ReturnEventArgs.cs
- DataTableMappingCollection.cs
- CutCopyPasteHelper.cs
- ImageClickEventArgs.cs
- KeyBinding.cs
- RelatedImageListAttribute.cs
- ListViewEditEventArgs.cs
- SizeAnimationClockResource.cs
- DESCryptoServiceProvider.cs
- DCSafeHandle.cs
- ScriptServiceAttribute.cs
- DirectionalLight.cs
- DocumentPaginator.cs
- WebPartMovingEventArgs.cs
- DeferredTextReference.cs
- DodSequenceMerge.cs
- ImmutablePropertyDescriptorGridEntry.cs
- _ListenerResponseStream.cs
- PropertySourceInfo.cs
- OleDbParameterCollection.cs
- Label.cs
- Site.cs
- TraceSource.cs
- MatrixConverter.cs
- TextEditorThreadLocalStore.cs
- ToolStripDropDownMenu.cs
- XamlFrame.cs
- FunctionNode.cs
- WeakReadOnlyCollection.cs
- XmlDataSource.cs
- x509utils.cs
- FormsAuthenticationTicket.cs
- SafeViewOfFileHandle.cs
- EntityDesignerUtils.cs
- Table.cs
- MultipartIdentifier.cs
- ImageDrawing.cs
- StreamWithDictionary.cs
- Form.cs
- SafeEventLogWriteHandle.cs
- StorageMappingItemLoader.cs
- CustomErrorsSectionWrapper.cs
- IdentifierCollection.cs
- LinkedDataMemberFieldEditor.cs
- HighlightVisual.cs
- DataGridCell.cs
- BitmapVisualManager.cs