Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- QuaternionValueSerializer.cs
- ReadOnlyKeyedCollection.cs
- StateManagedCollection.cs
- BufferedReceiveElement.cs
- EventListener.cs
- ArraySubsetEnumerator.cs
- MobileUITypeEditor.cs
- CellTreeNodeVisitors.cs
- ItemCheckEvent.cs
- SqlWebEventProvider.cs
- Table.cs
- linebase.cs
- DataListCommandEventArgs.cs
- AuthenticationSection.cs
- RouteValueExpressionBuilder.cs
- DSASignatureFormatter.cs
- DefaultClaimSet.cs
- newinstructionaction.cs
- ObjectConverter.cs
- DbReferenceCollection.cs
- RolePrincipal.cs
- validationstate.cs
- NumberFormatInfo.cs
- AutomationProperty.cs
- AsymmetricAlgorithm.cs
- CodeMemberEvent.cs
- MemberBinding.cs
- CheckPair.cs
- Matrix3DValueSerializer.cs
- TraceContext.cs
- MemberCollection.cs
- PageBreakRecord.cs
- ThreadPool.cs
- ConfigXmlText.cs
- X509Utils.cs
- CleanUpVirtualizedItemEventArgs.cs
- Size3D.cs
- ConstrainedDataObject.cs
- TableLayoutSettings.cs
- DataGridViewRowsRemovedEventArgs.cs
- RequestSecurityTokenForGetBrowserToken.cs
- ProfileBuildProvider.cs
- LassoHelper.cs
- ColorAnimation.cs
- OrthographicCamera.cs
- OrCondition.cs
- IISUnsafeMethods.cs
- CacheOutputQuery.cs
- XmlILStorageConverter.cs
- SiteMapNodeItem.cs
- BindingListCollectionView.cs
- ReplacementText.cs
- DataGridTableCollection.cs
- BooleanToVisibilityConverter.cs
- JsonClassDataContract.cs
- Empty.cs
- figurelengthconverter.cs
- StatusBarPanelClickEvent.cs
- ControlBuilderAttribute.cs
- XmlAggregates.cs
- Random.cs
- FixUpCollection.cs
- ControlBindingsCollection.cs
- JapaneseLunisolarCalendar.cs
- WebPartEditVerb.cs
- CopyAttributesAction.cs
- DispatchWrapper.cs
- CheckBox.cs
- SimpleHandlerFactory.cs
- TimeEnumHelper.cs
- SessionSymmetricTransportSecurityProtocolFactory.cs
- EntityDataSourceValidationException.cs
- NativeObjectSecurity.cs
- VariableBinder.cs
- TypeListConverter.cs
- GridViewUpdateEventArgs.cs
- ListControlBoundActionList.cs
- CustomDictionarySources.cs
- xamlnodes.cs
- TextRenderingModeValidation.cs
- DataGridViewDataConnection.cs
- AttributeCollection.cs
- ExpressionEvaluator.cs
- BindingCollection.cs
- PersonalizationProviderHelper.cs
- SortDescriptionCollection.cs
- ModelVisual3D.cs
- RotateTransform3D.cs
- TextEditorSpelling.cs
- TreeNodeConverter.cs
- PathSegmentCollection.cs
- PixelFormats.cs
- DefinitionUpdate.cs
- IndexedString.cs
- Timer.cs
- TabControl.cs
- XLinq.cs
- RepeaterCommandEventArgs.cs
- MSHTMLHost.cs
- BitFlagsGenerator.cs