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
- EventMappingSettingsCollection.cs
- MenuItemBindingCollection.cs
- x509store.cs
- ReaderWriterLockSlim.cs
- AffineTransform3D.cs
- itemelement.cs
- StaticSiteMapProvider.cs
- KeyToListMap.cs
- Comparer.cs
- TrustSection.cs
- MetadataCache.cs
- DuplexChannelFactory.cs
- DatePickerAutomationPeer.cs
- EventLogQuery.cs
- DescendentsWalkerBase.cs
- SafeCloseHandleCritical.cs
- WebResourceAttribute.cs
- ReachFixedDocumentSerializer.cs
- TrackingWorkflowEventArgs.cs
- TraceContextEventArgs.cs
- BufferCache.cs
- TextRunCacheImp.cs
- SubstitutionList.cs
- Misc.cs
- SubclassTypeValidator.cs
- Sentence.cs
- InfoCardRequestException.cs
- AsyncPostBackErrorEventArgs.cs
- ZipIOCentralDirectoryFileHeader.cs
- counter.cs
- Table.cs
- EntitySqlQueryBuilder.cs
- GcHandle.cs
- ObjectViewFactory.cs
- QilPatternVisitor.cs
- TextServicesHost.cs
- TextMarkerSource.cs
- TrackingParticipant.cs
- CanonicalXml.cs
- SelectionListDesigner.cs
- ToolboxItemCollection.cs
- JapaneseCalendar.cs
- HtmlElementEventArgs.cs
- UnmanagedMemoryStream.cs
- MulticastDelegate.cs
- Funcletizer.cs
- ResourceManager.cs
- ObjectAnimationUsingKeyFrames.cs
- SchemaObjectWriter.cs
- SyncMethodInvoker.cs
- PrivilegeNotHeldException.cs
- Int32.cs
- Accessors.cs
- ItemsChangedEventArgs.cs
- PropertyGeneratedEventArgs.cs
- FormCollection.cs
- AuthenticationService.cs
- PerformanceCounterCategory.cs
- Baml2006ReaderContext.cs
- XmlValidatingReaderImpl.cs
- BamlLocalizableResourceKey.cs
- SystemIPv4InterfaceProperties.cs
- DrawingServices.cs
- NameScope.cs
- InternalDispatchObject.cs
- HtmlGenericControl.cs
- SafeHandles.cs
- DataGridToolTip.cs
- CryptoKeySecurity.cs
- EntityDataSourceColumn.cs
- DeploymentSection.cs
- Int64Converter.cs
- HtmlElementErrorEventArgs.cs
- safex509handles.cs
- ProgramPublisher.cs
- TextDecorationLocationValidation.cs
- SendKeys.cs
- Label.cs
- VisualStyleRenderer.cs
- BindingCompleteEventArgs.cs
- ProxyAttribute.cs
- GiveFeedbackEventArgs.cs
- StrokeNode.cs
- PageCanvasSize.cs
- TextEditorTyping.cs
- StreamingContext.cs
- MethodToken.cs
- base64Transforms.cs
- StartFileNameEditor.cs
- VSWCFServiceContractGenerator.cs
- TextEmbeddedObject.cs
- Visual3D.cs
- DataSourceView.cs
- AssociationType.cs
- ReadOnlyNameValueCollection.cs
- DoubleCollectionValueSerializer.cs
- ObjectParameterCollection.cs
- ConnectionPoint.cs
- ScriptResourceAttribute.cs
- TableStyle.cs