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
- ZoneLinkButton.cs
- DefaultEvaluationContext.cs
- FixedLineResult.cs
- ResXResourceWriter.cs
- DesignDataSource.cs
- PaintValueEventArgs.cs
- ValidatorCollection.cs
- SoapHeader.cs
- UserControlBuildProvider.cs
- CodeTypeParameterCollection.cs
- LogAppendAsyncResult.cs
- ContextConfiguration.cs
- TextEmbeddedObject.cs
- DtrList.cs
- COAUTHIDENTITY.cs
- RangeBaseAutomationPeer.cs
- SpeechRecognitionEngine.cs
- MemberDomainMap.cs
- UnmanagedHandle.cs
- TimeStampChecker.cs
- RectangleConverter.cs
- DefaultTextStore.cs
- StylusButtonEventArgs.cs
- PrivilegeNotHeldException.cs
- QilName.cs
- ServiceEndpointElementCollection.cs
- MapPathBasedVirtualPathProvider.cs
- UrlMapping.cs
- IndependentlyAnimatedPropertyMetadata.cs
- DeferredTextReference.cs
- TraceInternal.cs
- EditorPartChrome.cs
- XmlElementAttribute.cs
- WebServiceClientProxyGenerator.cs
- TextBlock.cs
- _Win32.cs
- ListenerElementsCollection.cs
- EntityDataSourceContextCreatedEventArgs.cs
- GroupBoxRenderer.cs
- Identity.cs
- NotifyCollectionChangedEventArgs.cs
- TriggerCollection.cs
- SQLInt64Storage.cs
- ToolStripItemEventArgs.cs
- ProvidersHelper.cs
- DatePickerTextBox.cs
- MenuCommands.cs
- OutputScope.cs
- WsiProfilesElement.cs
- ErrorFormatterPage.cs
- InvalidStoreProtectionKeyException.cs
- EntityViewGenerator.cs
- tooltip.cs
- DataKey.cs
- XmlSignatureProperties.cs
- TimeSpanValidatorAttribute.cs
- Util.cs
- PopupRoot.cs
- ElementUtil.cs
- SerializationFieldInfo.cs
- OdbcRowUpdatingEvent.cs
- ViewLoader.cs
- ResXBuildProvider.cs
- CompiledIdentityConstraint.cs
- ExtendedProtectionPolicyTypeConverter.cs
- DefaultTextStoreTextComposition.cs
- DataTableCollection.cs
- InvariantComparer.cs
- ProgressBarRenderer.cs
- documentsequencetextview.cs
- DataGridViewRowEventArgs.cs
- EncoderParameters.cs
- PropVariant.cs
- PenThreadWorker.cs
- DataGridViewTopRowAccessibleObject.cs
- DynamicEndpointElement.cs
- KeyFrames.cs
- GZipStream.cs
- Function.cs
- CodeArgumentReferenceExpression.cs
- DesignerResources.cs
- sortedlist.cs
- Endpoint.cs
- ObjectRef.cs
- FileDialog.cs
- DomainUpDown.cs
- TextMetrics.cs
- DispatcherFrame.cs
- BindingsCollection.cs
- WindowsStatic.cs
- PasswordDeriveBytes.cs
- XPathNodePointer.cs
- LayoutTable.cs
- IntSecurity.cs
- XmlValueConverter.cs
- TextMessageEncodingBindingElement.cs
- TypeValidationEventArgs.cs
- ConstantProjectedSlot.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- XhtmlTextWriter.cs