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
- ProvideValueServiceProvider.cs
- _emptywebproxy.cs
- Calendar.cs
- FixedPosition.cs
- PageStatePersister.cs
- TypeKeyValue.cs
- Comparer.cs
- UserThread.cs
- CharUnicodeInfo.cs
- securitymgrsite.cs
- MimeTypePropertyAttribute.cs
- WindowsRebar.cs
- StaticSiteMapProvider.cs
- ProviderCommandInfoUtils.cs
- SqlProcedureAttribute.cs
- XmlSerializationReader.cs
- OpCopier.cs
- DivideByZeroException.cs
- DTCTransactionManager.cs
- DynamicPropertyHolder.cs
- PolicyLevel.cs
- ComponentManagerBroker.cs
- DefaultHttpHandler.cs
- TimerEventSubscription.cs
- OracleTimeSpan.cs
- XXXOnTypeBuilderInstantiation.cs
- SizeAnimation.cs
- MachineSettingsSection.cs
- AppSecurityManager.cs
- CodeThrowExceptionStatement.cs
- NullableFloatSumAggregationOperator.cs
- XmlnsDictionary.cs
- PropertiesTab.cs
- SeverityFilter.cs
- LocationReferenceEnvironment.cs
- ImageSource.cs
- MultipleCopiesCollection.cs
- Convert.cs
- XmlFormatExtensionAttribute.cs
- ListItemCollection.cs
- RuleRefElement.cs
- InternalRelationshipCollection.cs
- ApplicationSecurityManager.cs
- MethodCallTranslator.cs
- AsyncResult.cs
- LinqDataSourceDeleteEventArgs.cs
- VirtualizedItemProviderWrapper.cs
- ProxyWebPartConnectionCollection.cs
- SchemaTableColumn.cs
- RadioButtonStandardAdapter.cs
- CatalogZoneDesigner.cs
- TypeSource.cs
- GPRECTF.cs
- ClonableStack.cs
- LateBoundBitmapDecoder.cs
- ToolStripPanel.cs
- SafeFindHandle.cs
- AlternateView.cs
- AffineTransform3D.cs
- BreakSafeBase.cs
- Schema.cs
- StreamInfo.cs
- AppDomain.cs
- SelectedGridItemChangedEvent.cs
- CodeMemberMethod.cs
- BinHexDecoder.cs
- Timeline.cs
- InkCanvasFeedbackAdorner.cs
- FixedLineResult.cs
- ResourceExpressionEditorSheet.cs
- ManagedFilter.cs
- RoleManagerSection.cs
- UntypedNullExpression.cs
- DoubleUtil.cs
- XmlWriter.cs
- Imaging.cs
- EncryptedHeader.cs
- PackageRelationshipCollection.cs
- Rect3D.cs
- TextTreeInsertElementUndoUnit.cs
- DataSourceXmlSerializationAttribute.cs
- ConfigurationValidatorBase.cs
- BreadCrumbTextConverter.cs
- ConditionalAttribute.cs
- ContentFileHelper.cs
- XmlSchemaSimpleContentExtension.cs
- SponsorHelper.cs
- MenuAdapter.cs
- PropertyOverridesDialog.cs
- IteratorFilter.cs
- COM2ExtendedTypeConverter.cs
- ColorBlend.cs
- HebrewNumber.cs
- LazyTextWriterCreator.cs
- DropDownList.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- SafeNativeMethods.cs
- ThreadPool.cs
- SchemaElement.cs
- GatewayIPAddressInformationCollection.cs