Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FormParameter.cs
- PathParser.cs
- EntityRecordInfo.cs
- XmlNamespaceMappingCollection.cs
- VerticalAlignConverter.cs
- DataColumnChangeEvent.cs
- UIAgentAsyncParams.cs
- TreeNodeCollection.cs
- PropertyConverter.cs
- CannotUnloadAppDomainException.cs
- Int32Storage.cs
- AbstractDataSvcMapFileLoader.cs
- TransactionManager.cs
- XmlSchemaExporter.cs
- KeyPressEvent.cs
- QueryCacheEntry.cs
- QueueSurrogate.cs
- SQLInt32Storage.cs
- AppliedDeviceFiltersDialog.cs
- HttpException.cs
- GlyphsSerializer.cs
- DbProviderFactory.cs
- MetafileHeader.cs
- FlowLayoutPanel.cs
- XmlQueryTypeFactory.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- DecoderExceptionFallback.cs
- HttpBrowserCapabilitiesBase.cs
- GroupQuery.cs
- TextTreeFixupNode.cs
- TextEditorSelection.cs
- LabelLiteral.cs
- FlowLayout.cs
- ExtractorMetadata.cs
- XamlNamespaceHelper.cs
- XmlEncoding.cs
- ChildDocumentBlock.cs
- RegexNode.cs
- DataSourceComponent.cs
- DataGridParentRows.cs
- AsymmetricKeyExchangeFormatter.cs
- TypeTypeConverter.cs
- BuildProvider.cs
- AffineTransform3D.cs
- ErrorWrapper.cs
- SQLInt32.cs
- xmlsaver.cs
- GeneralTransform3D.cs
- AliasGenerator.cs
- TypeBrowserDialog.cs
- DropShadowBitmapEffect.cs
- InternalBase.cs
- AmbientLight.cs
- HtmlCalendarAdapter.cs
- Latin1Encoding.cs
- WebExceptionStatus.cs
- ControlCodeDomSerializer.cs
- DrawingGroup.cs
- SecurityPolicySection.cs
- ContainsRowNumberChecker.cs
- LambdaCompiler.Lambda.cs
- FormsIdentity.cs
- DataGridState.cs
- DataSourceSelectArguments.cs
- GraphicsPathIterator.cs
- DbConnectionPool.cs
- HostedImpersonationContext.cs
- assertwrapper.cs
- URLMembershipCondition.cs
- Int64AnimationUsingKeyFrames.cs
- TypedTableHandler.cs
- AttributeUsageAttribute.cs
- _IPv4Address.cs
- SystemInformation.cs
- SafePEFileHandle.cs
- PartialCachingControl.cs
- DateBoldEvent.cs
- AtomMaterializer.cs
- WebPartAuthorizationEventArgs.cs
- FontResourceCache.cs
- FieldBuilder.cs
- CompleteWizardStep.cs
- Token.cs
- DocumentStream.cs
- MouseButtonEventArgs.cs
- InstanceOwnerQueryResult.cs
- RangeExpression.cs
- WebBrowser.cs
- FontWeight.cs
- TextTreeExtractElementUndoUnit.cs
- WsdlExporter.cs
- DbMetaDataColumnNames.cs
- DynamicValueConverter.cs
- PropertyGrid.cs
- Geometry3D.cs
- StrokeNodeData.cs
- ListViewInsertionMark.cs
- FrameworkName.cs
- DataGridBoolColumn.cs
- TextTrailingWordEllipsis.cs