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
- Triplet.cs
- XmlCompatibilityReader.cs
- AQNBuilder.cs
- NameValueFileSectionHandler.cs
- ItemList.cs
- RenderingBiasValidation.cs
- _HelperAsyncResults.cs
- DataServiceRequest.cs
- SerializationInfo.cs
- ValidatedMobileControlConverter.cs
- IsolatedStorageFilePermission.cs
- DecoderFallbackWithFailureFlag.cs
- TableCellsCollectionEditor.cs
- ElementProxy.cs
- Point3DAnimation.cs
- WSTrust.cs
- WindowsPen.cs
- DirectoryRedirect.cs
- CalendarModeChangedEventArgs.cs
- MatcherBuilder.cs
- JsonByteArrayDataContract.cs
- PolicyLevel.cs
- FontStretches.cs
- WindowsTreeView.cs
- SelectionChangedEventArgs.cs
- SqlError.cs
- XmlCollation.cs
- TextTreeRootTextBlock.cs
- CacheDependency.cs
- DomNameTable.cs
- FileDialogCustomPlacesCollection.cs
- EventLogRecord.cs
- DbProviderServices.cs
- wmiprovider.cs
- ExtendedPropertyCollection.cs
- TimeoutValidationAttribute.cs
- documentsequencetextcontainer.cs
- LinkLabel.cs
- ActivityCodeGenerator.cs
- QueryCursorEventArgs.cs
- AppDomainManager.cs
- ZipFileInfoCollection.cs
- Int16Animation.cs
- DataGridViewComboBoxEditingControl.cs
- DbParameterCollection.cs
- ListSourceHelper.cs
- MsmqChannelFactory.cs
- DataGrid.cs
- UnknownWrapper.cs
- PrintPreviewGraphics.cs
- ToolStripItemTextRenderEventArgs.cs
- ByeOperationCD1AsyncResult.cs
- RijndaelManaged.cs
- ObjectSpanRewriter.cs
- x509store.cs
- HttpPostProtocolReflector.cs
- JoinElimination.cs
- InstanceCreationEditor.cs
- BitStream.cs
- ReadOnlyDataSourceView.cs
- MD5CryptoServiceProvider.cs
- WindowsPrincipal.cs
- GlobalProxySelection.cs
- InvalidDataContractException.cs
- MeasureItemEvent.cs
- SimpleWorkerRequest.cs
- EntityDataSourceQueryBuilder.cs
- StylusPointPropertyId.cs
- EnumValAlphaComparer.cs
- StatusCommandUI.cs
- RayHitTestParameters.cs
- Stacktrace.cs
- ScaleTransform3D.cs
- BitmapEffectInputConnector.cs
- ProfileService.cs
- Decoder.cs
- AlternateView.cs
- RangeValuePatternIdentifiers.cs
- EntityDataSourceContainerNameConverter.cs
- Application.cs
- TokenBasedSet.cs
- MasterPageParser.cs
- Padding.cs
- UIPropertyMetadata.cs
- InkCanvas.cs
- TypeElement.cs
- ListViewTableRow.cs
- Internal.cs
- LocalizationParserHooks.cs
- SafeIUnknown.cs
- SelectedGridItemChangedEvent.cs
- TileBrush.cs
- DeobfuscatingStream.cs
- ComAdminWrapper.cs
- Process.cs
- TraceHandlerErrorFormatter.cs
- SequenceNumber.cs
- ClientTarget.cs
- validation.cs
- FastEncoderWindow.cs