Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- AsymmetricAlgorithm.cs
- ListViewSortEventArgs.cs
- RSAOAEPKeyExchangeFormatter.cs
- SoapAttributes.cs
- SubMenuStyleCollection.cs
- RefreshPropertiesAttribute.cs
- CompiledQuery.cs
- TagPrefixAttribute.cs
- LinkLabelLinkClickedEvent.cs
- TokenizerHelper.cs
- DataPager.cs
- AsymmetricSignatureDeformatter.cs
- _HeaderInfoTable.cs
- DesignTimeHTMLTextWriter.cs
- ConnectionPoolManager.cs
- mongolianshape.cs
- ThreadAbortException.cs
- StreamGeometryContext.cs
- SafeEventLogWriteHandle.cs
- RegistrySecurity.cs
- ApplicationFileParser.cs
- Convert.cs
- StatusBarPanel.cs
- KeyNameIdentifierClause.cs
- FixedSOMTable.cs
- ControlEvent.cs
- NavigationProgressEventArgs.cs
- RegexWorker.cs
- TabRenderer.cs
- WebPartZoneBase.cs
- HwndHost.cs
- ControlPropertyNameConverter.cs
- SizeConverter.cs
- DrawingGroup.cs
- StringUtil.cs
- StylusShape.cs
- UserPreferenceChangingEventArgs.cs
- TemplateColumn.cs
- Pair.cs
- FlowDocumentReaderAutomationPeer.cs
- ACL.cs
- Baml2006ReaderFrame.cs
- DocumentEventArgs.cs
- LineUtil.cs
- RuntimeConfigLKG.cs
- ImageSource.cs
- NamedPipeTransportSecurity.cs
- hresults.cs
- _LocalDataStore.cs
- StateManagedCollection.cs
- SafeMemoryMappedFileHandle.cs
- AttachInfo.cs
- PathFigureCollectionValueSerializer.cs
- NativeCompoundFileAPIs.cs
- ResourceExpressionBuilder.cs
- TransformFinalBlockRequest.cs
- TabControlAutomationPeer.cs
- TreeNodeStyle.cs
- DateTimeFormatInfo.cs
- followingsibling.cs
- ExcCanonicalXml.cs
- basenumberconverter.cs
- TypeForwardedToAttribute.cs
- DecoratedNameAttribute.cs
- PointLightBase.cs
- XmlTextReader.cs
- PrintPageEvent.cs
- MessageSmuggler.cs
- SQLMoney.cs
- StateWorkerRequest.cs
- DATA_BLOB.cs
- WebBrowserNavigatingEventHandler.cs
- DrawingBrush.cs
- BindingWorker.cs
- TextAutomationPeer.cs
- ConstraintEnumerator.cs
- RecordBuilder.cs
- ObjectNavigationPropertyMapping.cs
- PaintValueEventArgs.cs
- FixedFlowMap.cs
- assertwrapper.cs
- DisposableCollectionWrapper.cs
- DataGridAutoFormat.cs
- XPathEmptyIterator.cs
- ITextView.cs
- CategoryState.cs
- PerformanceCounterManager.cs
- OleDbEnumerator.cs
- TreePrinter.cs
- ScalarType.cs
- EasingFunctionBase.cs
- DataGridViewColumnEventArgs.cs
- PreviewPageInfo.cs
- AssemblyGen.cs
- DocumentViewerConstants.cs
- BinaryParser.cs
- Memoizer.cs
- ServiceOperationParameter.cs
- WeakHashtable.cs
- WsrmFault.cs