Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- HttpWriter.cs
- CommandManager.cs
- ViewBox.cs
- TypeConverterHelper.cs
- HttpModuleCollection.cs
- IgnoreDataMemberAttribute.cs
- MatrixUtil.cs
- BinaryHeap.cs
- InheritablePropertyChangeInfo.cs
- MemoryFailPoint.cs
- CodeDomSerializerException.cs
- DiscreteKeyFrames.cs
- DataControlPagerLinkButton.cs
- ProgressBarBrushConverter.cs
- TreeNodeBinding.cs
- XsdDuration.cs
- PasswordTextContainer.cs
- RootBrowserWindow.cs
- TextRunCacheImp.cs
- LocationEnvironment.cs
- InputLanguageEventArgs.cs
- ObjectDataSourceView.cs
- Journaling.cs
- CodeDomConfigurationHandler.cs
- IPCCacheManager.cs
- xml.cs
- OdbcPermission.cs
- StackBuilderSink.cs
- GrammarBuilder.cs
- ComplexPropertyEntry.cs
- StyleXamlParser.cs
- CallSiteOps.cs
- DbTransaction.cs
- XPathNavigatorKeyComparer.cs
- TriState.cs
- HtmlElementEventArgs.cs
- BinHexEncoder.cs
- DetailsViewPageEventArgs.cs
- AlignmentYValidation.cs
- AssemblyFilter.cs
- SqlClientWrapperSmiStream.cs
- TimeBoundedCache.cs
- WebPartEditorCancelVerb.cs
- InvalidComObjectException.cs
- FixedSOMElement.cs
- MessagePropertyVariants.cs
- DbExpressionBuilder.cs
- DataGridViewCell.cs
- IUnknownConstantAttribute.cs
- HttpModulesSection.cs
- AQNBuilder.cs
- DataGridColumn.cs
- COM2PictureConverter.cs
- XpsPackagingPolicy.cs
- WindowsListView.cs
- BitmapEncoder.cs
- DataGridColumnStyleMappingNameEditor.cs
- EntityTypeEmitter.cs
- FirewallWrapper.cs
- LoaderAllocator.cs
- _SpnDictionary.cs
- ADMembershipProvider.cs
- OdbcConnectionStringbuilder.cs
- MarkupCompilePass2.cs
- BinaryReader.cs
- ZipIOFileItemStream.cs
- ExpressionBindingsDialog.cs
- Activator.cs
- RowCache.cs
- GPPOINTF.cs
- StatusBarPanel.cs
- MatrixAnimationUsingKeyFrames.cs
- DictationGrammar.cs
- SmtpReplyReaderFactory.cs
- DataGridViewCellPaintingEventArgs.cs
- ContextQuery.cs
- _ChunkParse.cs
- AuthenticationModuleElement.cs
- NamedPipeTransportSecurity.cs
- HitTestDrawingContextWalker.cs
- SolidColorBrush.cs
- HostingEnvironment.cs
- WindowsToolbarAsMenu.cs
- TimelineClockCollection.cs
- CodeMemberProperty.cs
- Registry.cs
- TextTabProperties.cs
- IconConverter.cs
- SqlCacheDependencyDatabaseCollection.cs
- MarkupExtensionSerializer.cs
- StringAttributeCollection.cs
- TcpWorkerProcess.cs
- TreeView.cs
- VariableQuery.cs
- X500Name.cs
- FolderNameEditor.cs
- XslAstAnalyzer.cs
- ProfileSection.cs
- ToolBarOverflowPanel.cs
- SecurityContextSecurityTokenParameters.cs