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; 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
- XmlSubtreeReader.cs
- ComponentResourceManager.cs
- Operators.cs
- UIElementAutomationPeer.cs
- DocumentXPathNavigator.cs
- SerializerWriterEventHandlers.cs
- ConsoleCancelEventArgs.cs
- RepeatBehavior.cs
- BindingNavigator.cs
- TextElementEnumerator.cs
- MSHTMLHost.cs
- CodeMethodReturnStatement.cs
- SystemInfo.cs
- precedingquery.cs
- CookieParameter.cs
- Stackframe.cs
- TraceLevelStore.cs
- streamingZipPartStream.cs
- SqlFunctionAttribute.cs
- IssuedTokenClientBehaviorsElementCollection.cs
- columnmapfactory.cs
- RefreshPropertiesAttribute.cs
- Win32PrintDialog.cs
- XmlIlVisitor.cs
- OpenTypeLayoutCache.cs
- DbTransaction.cs
- DataPagerFieldItem.cs
- ComponentEvent.cs
- ToolStripProgressBar.cs
- Deflater.cs
- DataColumnPropertyDescriptor.cs
- WebPartMinimizeVerb.cs
- safemediahandle.cs
- StandardBindingElement.cs
- counter.cs
- ProjectionPlanCompiler.cs
- HelpEvent.cs
- EventDescriptor.cs
- DataTable.cs
- LessThanOrEqual.cs
- UnsafeNativeMethodsPenimc.cs
- ErrorRuntimeConfig.cs
- XmlSerializableReader.cs
- WsatAdminException.cs
- HtmlElementEventArgs.cs
- KeyValuePair.cs
- CultureInfoConverter.cs
- SplineQuaternionKeyFrame.cs
- RelOps.cs
- CqlParser.cs
- TabletDeviceInfo.cs
- RadioButtonFlatAdapter.cs
- SqlClientMetaDataCollectionNames.cs
- Rss20ItemFormatter.cs
- XmlLinkedNode.cs
- ProfileManager.cs
- SchemaManager.cs
- Rules.cs
- _LocalDataStore.cs
- EnvelopedPkcs7.cs
- ListViewInsertionMark.cs
- Comparer.cs
- State.cs
- TextTreePropertyUndoUnit.cs
- InputScopeNameConverter.cs
- HtmlControlPersistable.cs
- SafeTokenHandle.cs
- ReferencedAssembly.cs
- TextSerializer.cs
- WebResourceUtil.cs
- PageCatalogPart.cs
- SessionSwitchEventArgs.cs
- CapabilitiesSection.cs
- WebPartRestoreVerb.cs
- TableParaClient.cs
- SafeNativeMemoryHandle.cs
- BooleanToVisibilityConverter.cs
- DataListItem.cs
- EqualityComparer.cs
- BooleanStorage.cs
- SamlSubject.cs
- SourceFileInfo.cs
- XmlSchemaSimpleContentRestriction.cs
- LinkClickEvent.cs
- MasterPageBuildProvider.cs
- EntityDataSourceStatementEditor.cs
- WebBrowserBase.cs
- BitmapMetadataBlob.cs
- SqlResolver.cs
- ExpressionConverter.cs
- ParameterElement.cs
- COM2ComponentEditor.cs
- BamlBinaryReader.cs
- ApplyImportsAction.cs
- AccessViolationException.cs
- _CommandStream.cs
- CodeArgumentReferenceExpression.cs
- SettingsProviderCollection.cs
- PackagingUtilities.cs
- StylusPlugInCollection.cs