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
- TransactionTable.cs
- Point.cs
- ArcSegment.cs
- XslAst.cs
- WsiProfilesElementCollection.cs
- FontFamilyValueSerializer.cs
- SimpleApplicationHost.cs
- CultureSpecificStringDictionary.cs
- Queue.cs
- URLString.cs
- DocComment.cs
- SelectQueryOperator.cs
- CounterCreationDataCollection.cs
- EnumMemberAttribute.cs
- CustomWebEventKey.cs
- CasesDictionary.cs
- Freezable.cs
- Atom10FeedFormatter.cs
- RoutingSection.cs
- DataSourceControlBuilder.cs
- ControlCollection.cs
- WebPartVerbCollection.cs
- FieldAccessException.cs
- streamingZipPartStream.cs
- EnterpriseServicesHelper.cs
- DataGridViewSortCompareEventArgs.cs
- GetLastErrorDetailsRequest.cs
- DropShadowEffect.cs
- ErrorEventArgs.cs
- cache.cs
- Regex.cs
- backend.cs
- ProcessModelSection.cs
- SmiContextFactory.cs
- BoundsDrawingContextWalker.cs
- IdentityValidationException.cs
- XmlTextAttribute.cs
- Constraint.cs
- AsnEncodedData.cs
- OleDbEnumerator.cs
- COM2TypeInfoProcessor.cs
- AutomationEvent.cs
- DbConnectionHelper.cs
- XmlCharType.cs
- DataGridViewCellMouseEventArgs.cs
- BaseAutoFormat.cs
- SiblingIterators.cs
- ServiceObjectContainer.cs
- XmlEncodedRawTextWriter.cs
- XamlVector3DCollectionSerializer.cs
- FormatterServices.cs
- SqlCommandBuilder.cs
- ResourceDisplayNameAttribute.cs
- DataListItem.cs
- DocumentXPathNavigator.cs
- PageEventArgs.cs
- SAPIEngineTypes.cs
- Encoding.cs
- TraceUtility.cs
- HttpModuleActionCollection.cs
- InputMethodStateChangeEventArgs.cs
- XmlAttributeAttribute.cs
- IntSecurity.cs
- Receive.cs
- HexParser.cs
- InlineUIContainer.cs
- Certificate.cs
- Assert.cs
- UnknownBitmapDecoder.cs
- SqlExpressionNullability.cs
- PenContexts.cs
- ISCIIEncoding.cs
- Divide.cs
- XPathNodeList.cs
- ColorConvertedBitmapExtension.cs
- TypeDependencyAttribute.cs
- ComponentEvent.cs
- EnumValidator.cs
- IriParsingElement.cs
- GridView.cs
- TraceHandler.cs
- IndexOutOfRangeException.cs
- GraphicsContainer.cs
- ListViewGroupConverter.cs
- TextServicesCompartmentEventSink.cs
- HttpListenerContext.cs
- SocketAddress.cs
- KeyFrames.cs
- ImmComposition.cs
- HttpDebugHandler.cs
- ButtonBase.cs
- KeyManager.cs
- XdrBuilder.cs
- ExpressionConverter.cs
- Opcode.cs
- NativeMethods.cs
- PermissionSet.cs
- CqlLexerHelpers.cs
- TextDecorations.cs
- ControlType.cs