Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ViewEventArgs.cs
- ThreadInterruptedException.cs
- DataGridViewRowCollection.cs
- DisplayMemberTemplateSelector.cs
- WSFederationHttpSecurityElement.cs
- OdbcHandle.cs
- QueryAsyncResult.cs
- Opcode.cs
- BamlBinaryWriter.cs
- SqlStream.cs
- SubMenuStyleCollection.cs
- CollectionContainer.cs
- DataServiceException.cs
- OdbcFactory.cs
- IPGlobalProperties.cs
- SourceFileBuildProvider.cs
- EditorPartCollection.cs
- PackageRelationship.cs
- StrongNameUtility.cs
- SizeChangedEventArgs.cs
- Membership.cs
- StringExpressionSet.cs
- DataGridRowHeader.cs
- CollectionsUtil.cs
- NetStream.cs
- SplineQuaternionKeyFrame.cs
- GridSplitter.cs
- ToolStripItemTextRenderEventArgs.cs
- Vector3D.cs
- DnsCache.cs
- FillErrorEventArgs.cs
- ListCollectionView.cs
- Variable.cs
- KnownBoxes.cs
- TableLayoutStyleCollection.cs
- DetailsViewCommandEventArgs.cs
- StorageFunctionMapping.cs
- VectorConverter.cs
- AttachmentService.cs
- XmlMtomWriter.cs
- ApplicationId.cs
- ToolZone.cs
- PhonemeEventArgs.cs
- Operators.cs
- TransformerInfo.cs
- DSASignatureDeformatter.cs
- RuntimeResourceSet.cs
- RequestUriProcessor.cs
- CommandLibraryHelper.cs
- QuaternionConverter.cs
- DefaultValueTypeConverter.cs
- CheckedListBox.cs
- InvokeCompletedEventArgs.cs
- Run.cs
- DeploymentSectionCache.cs
- StylusButtonCollection.cs
- TextModifierScope.cs
- WsdlContractConversionContext.cs
- CompareInfo.cs
- ScrollBar.cs
- StateValidator.cs
- FileLevelControlBuilderAttribute.cs
- ByteStorage.cs
- TextDecoration.cs
- KeyValuePair.cs
- DocumentApplication.cs
- FileAuthorizationModule.cs
- ServiceActivationException.cs
- DbConnectionInternal.cs
- UriSection.cs
- AbstractSvcMapFileLoader.cs
- ExitEventArgs.cs
- DbModificationClause.cs
- CompositionAdorner.cs
- ProviderUtil.cs
- InternalControlCollection.cs
- File.cs
- LocalTransaction.cs
- CasesDictionary.cs
- XmlWrappingReader.cs
- WarningException.cs
- LinearGradientBrush.cs
- StorageScalarPropertyMapping.cs
- FormsAuthenticationTicket.cs
- FileStream.cs
- EtwTrace.cs
- ProjectionPathSegment.cs
- NativeMethods.cs
- NativeCompoundFileAPIs.cs
- SqlProcedureAttribute.cs
- TreeNodeEventArgs.cs
- ByteConverter.cs
- XmlWriterTraceListener.cs
- ColumnTypeConverter.cs
- RadioButton.cs
- XmlSchemaGroup.cs
- RowCache.cs
- ConfigLoader.cs
- TreeIterator.cs
- CultureInfoConverter.cs