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
- RootDesignerSerializerAttribute.cs
- EventLogEntryCollection.cs
- DocumentXmlWriter.cs
- RefreshEventArgs.cs
- XmlElementAttributes.cs
- XmlRawWriter.cs
- XmlArrayAttribute.cs
- DataSvcMapFileSerializer.cs
- SoapExtensionImporter.cs
- ISAPIRuntime.cs
- BreadCrumbTextConverter.cs
- FormViewModeEventArgs.cs
- ZipIOCentralDirectoryFileHeader.cs
- Table.cs
- ChannelManager.cs
- Stopwatch.cs
- KnownBoxes.cs
- ReadOnlyTernaryTree.cs
- SelectingProviderEventArgs.cs
- Binding.cs
- UrlMappingCollection.cs
- UIElement3D.cs
- BaseResourcesBuildProvider.cs
- Unit.cs
- TableChangeProcessor.cs
- TriggerActionCollection.cs
- SoundPlayerAction.cs
- XMLSchema.cs
- EntitySqlException.cs
- coordinatorfactory.cs
- ClaimComparer.cs
- SafeFileHandle.cs
- SystemIcmpV4Statistics.cs
- AtomEntry.cs
- DesignerAutoFormat.cs
- ScrollBarAutomationPeer.cs
- SourceFileBuildProvider.cs
- GregorianCalendarHelper.cs
- StandardCommands.cs
- FixedDSBuilder.cs
- HashCodeCombiner.cs
- WizardSideBarListControlItemEventArgs.cs
- Win32Exception.cs
- BrowserDefinition.cs
- EnumUnknown.cs
- DataSetFieldSchema.cs
- securitycriticaldataClass.cs
- BridgeDataReader.cs
- GraphicsContainer.cs
- TemplateParser.cs
- RoleService.cs
- EdmScalarPropertyAttribute.cs
- Internal.cs
- MatrixTransform.cs
- DataSet.cs
- rsa.cs
- safelinkcollection.cs
- XmlIlGenerator.cs
- PlacementWorkspace.cs
- DbDataRecord.cs
- DictionaryEntry.cs
- CodeDirectoryCompiler.cs
- sqlstateclientmanager.cs
- MethodBuilderInstantiation.cs
- Stack.cs
- SiteOfOriginPart.cs
- ProtocolsConfigurationHandler.cs
- XXXInfos.cs
- TextTreeFixupNode.cs
- EventData.cs
- DrawingImage.cs
- DnsPermission.cs
- IDReferencePropertyAttribute.cs
- ExpressionValueEditor.cs
- ProcessInfo.cs
- ExceptionValidationRule.cs
- GuidConverter.cs
- AlphabeticalEnumConverter.cs
- ValidationRuleCollection.cs
- MetadataArtifactLoaderComposite.cs
- PeerToPeerException.cs
- ContainsRowNumberChecker.cs
- PackageRelationshipCollection.cs
- Substitution.cs
- LicenseContext.cs
- PageCatalogPart.cs
- GeneralTransform3DGroup.cs
- AddInSegmentDirectoryNotFoundException.cs
- XamlTypeMapper.cs
- HwndSourceKeyboardInputSite.cs
- WorkflowApplicationTerminatedException.cs
- DbModificationCommandTree.cs
- DbParameterHelper.cs
- InputReportEventArgs.cs
- HttpModuleCollection.cs
- XmlNamedNodeMap.cs
- WebBrowserEvent.cs
- XmlEnumAttribute.cs
- UTF8Encoding.cs
- SubMenuStyle.cs