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
- ConfigXmlAttribute.cs
- login.cs
- ConditionalBranch.cs
- StateItem.cs
- DateRangeEvent.cs
- ListViewItem.cs
- TextParagraphCache.cs
- Request.cs
- DynamicField.cs
- DropDownButton.cs
- ExtenderProvidedPropertyAttribute.cs
- UnionCqlBlock.cs
- Size.cs
- ColumnCollection.cs
- ManipulationVelocities.cs
- embossbitmapeffect.cs
- COM2ExtendedBrowsingHandler.cs
- XhtmlBasicFormAdapter.cs
- PropertyEntry.cs
- StrongNameKeyPair.cs
- FacetChecker.cs
- DocumentXmlWriter.cs
- XmlDocumentSchema.cs
- DescriptionCreator.cs
- PersianCalendar.cs
- AsymmetricKeyExchangeDeformatter.cs
- PageThemeParser.cs
- Scalars.cs
- AutomationPropertyInfo.cs
- TextCollapsingProperties.cs
- ScriptComponentDescriptor.cs
- WhiteSpaceTrimStringConverter.cs
- Enlistment.cs
- ActiveXHelper.cs
- BamlTreeNode.cs
- PageParser.cs
- Header.cs
- RegexCapture.cs
- MatchNoneMessageFilter.cs
- SubclassTypeValidator.cs
- SearchExpression.cs
- SpellerInterop.cs
- XmlSchemaSearchPattern.cs
- DirectoryRedirect.cs
- SerializationObjectManager.cs
- PageThemeBuildProvider.cs
- HtmlListAdapter.cs
- Utils.cs
- TextDecorations.cs
- ResourceReader.cs
- SafeNativeMethods.cs
- ContentFileHelper.cs
- StandardOleMarshalObject.cs
- StreamingContext.cs
- HitTestResult.cs
- AssociationTypeEmitter.cs
- HttpCacheVaryByContentEncodings.cs
- QuerySetOp.cs
- EntityContainerEntitySet.cs
- PrivilegedConfigurationManager.cs
- PowerStatus.cs
- TextRunTypographyProperties.cs
- DocumentViewerHelper.cs
- DesignerActionService.cs
- SynchronizationScope.cs
- RepeaterItemCollection.cs
- DefaultBindingPropertyAttribute.cs
- DetailsViewDeletedEventArgs.cs
- RadioButton.cs
- DataGrid.cs
- ExpressionEditorSheet.cs
- UnsupportedPolicyOptionsException.cs
- DBCommand.cs
- securitycriticaldata.cs
- ManagedIStream.cs
- DbProviderConfigurationHandler.cs
- CachedPathData.cs
- PasswordTextNavigator.cs
- SmiEventSink_Default.cs
- EditorBrowsableAttribute.cs
- Geometry.cs
- GroupByQueryOperator.cs
- CompilationRelaxations.cs
- FontWeight.cs
- DerivedKeySecurityTokenStub.cs
- ContentControl.cs
- ItemsPresenter.cs
- ImageMap.cs
- SortableBindingList.cs
- GenericAuthenticationEventArgs.cs
- shaperfactoryquerycacheentry.cs
- DocumentViewerHelper.cs
- SafeFileHandle.cs
- SHA512Managed.cs
- TimeIntervalCollection.cs
- WebResponse.cs
- Attributes.cs
- TreeNodeBindingCollection.cs
- WebPartEditorApplyVerb.cs
- SynchronizationLockException.cs