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;
List orders = 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;
List orders = 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
- SqlInternalConnectionSmi.cs
- StoreItemCollection.Loader.cs
- LicenseProviderAttribute.cs
- Point3DAnimationUsingKeyFrames.cs
- XamlTemplateSerializer.cs
- OperationAbortedException.cs
- StrokeCollectionConverter.cs
- DispatchProxy.cs
- VisualCollection.cs
- Normalization.cs
- ListViewDataItem.cs
- ResourceReferenceExpressionConverter.cs
- DataControlFieldCollection.cs
- HttpApplication.cs
- PlatformCulture.cs
- XsdDateTime.cs
- XmlILModule.cs
- DynamicActivityTypeDescriptor.cs
- HitTestDrawingContextWalker.cs
- PageAdapter.cs
- Control.cs
- SoapSchemaExporter.cs
- ContextBase.cs
- SizeKeyFrameCollection.cs
- PersonalizationProvider.cs
- BaseDataBoundControl.cs
- GregorianCalendar.cs
- GroupLabel.cs
- TdsParserStateObject.cs
- RenderContext.cs
- OleDbConnection.cs
- Figure.cs
- MessageBox.cs
- PropertyOverridesTypeEditor.cs
- XmlComment.cs
- ClientSettingsSection.cs
- PrivacyNoticeElement.cs
- OletxTransactionManager.cs
- X509Extension.cs
- DataGridPreparingCellForEditEventArgs.cs
- Activity.cs
- MediaSystem.cs
- DataGridViewSelectedCellCollection.cs
- DataTableClearEvent.cs
- CompatibleComparer.cs
- ConfigurationStrings.cs
- Semaphore.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- MetadataException.cs
- DataStorage.cs
- PageAsyncTask.cs
- QueueProcessor.cs
- MappingException.cs
- TimelineCollection.cs
- Point3DValueSerializer.cs
- XmlTypeAttribute.cs
- OrthographicCamera.cs
- UIElementIsland.cs
- RawStylusSystemGestureInputReport.cs
- DependencyProperty.cs
- FlowchartDesignerCommands.cs
- SkinBuilder.cs
- FieldToken.cs
- XmlDataSourceNodeDescriptor.cs
- TransformConverter.cs
- TextTreeDeleteContentUndoUnit.cs
- KnownTypeAttribute.cs
- HttpServerVarsCollection.cs
- Tuple.cs
- XPathArrayIterator.cs
- ParentControlDesigner.cs
- FileDetails.cs
- FacetEnabledSchemaElement.cs
- DirectionalLight.cs
- ImportCatalogPart.cs
- PointF.cs
- ConfigXmlElement.cs
- DummyDataSource.cs
- HelpEvent.cs
- HttpVersion.cs
- RoutingService.cs
- TextTreeRootNode.cs
- httpapplicationstate.cs
- CalculatedColumn.cs
- DbParameterCollectionHelper.cs
- ExpressionServices.cs
- PageVisual.cs
- ImageCodecInfo.cs
- AlphabetConverter.cs
- WorkerRequest.cs
- Rules.cs
- LineSegment.cs
- _Semaphore.cs
- ContainerFilterService.cs
- DetailsView.cs
- EditingMode.cs
- OutputWindow.cs
- QilReplaceVisitor.cs
- XmlExceptionHelper.cs
- OptimalTextSource.cs