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
- FindRequestContext.cs
- FullTextState.cs
- SimpleApplicationHost.cs
- Crc32.cs
- PlanCompiler.cs
- AssociationProvider.cs
- DataSvcMapFile.cs
- InvokeProviderWrapper.cs
- DbProviderFactories.cs
- SizeValueSerializer.cs
- ToolStripManager.cs
- LinqDataView.cs
- EventBindingService.cs
- LogLogRecordEnumerator.cs
- CodeDomSerializerBase.cs
- ContainerCodeDomSerializer.cs
- BorderGapMaskConverter.cs
- RadioButtonList.cs
- StrongNameUtility.cs
- SafeHandles.cs
- InvalidEnumArgumentException.cs
- ToolStripSystemRenderer.cs
- MailWriter.cs
- TextUtf8RawTextWriter.cs
- LogSwitch.cs
- Brushes.cs
- TokenBasedSetEnumerator.cs
- Debugger.cs
- IntSecurity.cs
- AppDomainUnloadedException.cs
- PrintDocument.cs
- EnumerableValidator.cs
- SimpleApplicationHost.cs
- SkipQueryOptionExpression.cs
- ScrollChrome.cs
- TokenBasedSetEnumerator.cs
- ControlCollection.cs
- MenuItem.cs
- StorageMappingItemCollection.cs
- DBSqlParserTable.cs
- NamespaceInfo.cs
- ComponentSerializationService.cs
- AffineTransform3D.cs
- ScriptReference.cs
- MetadataItemEmitter.cs
- WebPartConnectionsEventArgs.cs
- AxDesigner.cs
- BitmapData.cs
- StateManagedCollection.cs
- RectValueSerializer.cs
- NamespaceEmitter.cs
- MenuAutomationPeer.cs
- Storyboard.cs
- SqlDataSourceFilteringEventArgs.cs
- CompiledELinqQueryState.cs
- MethodAccessException.cs
- DesignerLinkAdapter.cs
- FolderNameEditor.cs
- EventLogWatcher.cs
- RijndaelManaged.cs
- TextTreeTextBlock.cs
- TimeSpanStorage.cs
- Int64KeyFrameCollection.cs
- HttpListenerPrefixCollection.cs
- DispatcherExceptionEventArgs.cs
- SamlDelegatingWriter.cs
- HttpWebRequest.cs
- XmlReader.cs
- ProtocolViolationException.cs
- LoadRetryStrategyFactory.cs
- FixedDocumentPaginator.cs
- WorkflowInlining.cs
- FileUpload.cs
- StrokeCollection.cs
- StringBuilder.cs
- DataGridViewCellStateChangedEventArgs.cs
- XpsThumbnail.cs
- SqlCacheDependencySection.cs
- EntityUtil.cs
- SerializeAbsoluteContext.cs
- EllipticalNodeOperations.cs
- WebPartConnectionsEventArgs.cs
- SelectionEditingBehavior.cs
- HwndTarget.cs
- WebMessageFormatHelper.cs
- Calendar.cs
- SqlBuffer.cs
- FormsAuthenticationEventArgs.cs
- WorkflowItemsPresenter.cs
- TCEAdapterGenerator.cs
- CallbackHandler.cs
- TagMapInfo.cs
- Camera.cs
- ReadContentAsBinaryHelper.cs
- AttachedPropertyInfo.cs
- TransportListener.cs
- ResourceCategoryAttribute.cs
- HebrewNumber.cs
- GeometryModel3D.cs
- PrintPreviewDialog.cs