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
- HttpCacheVaryByContentEncodings.cs
- Win32KeyboardDevice.cs
- SmiRecordBuffer.cs
- ReadOnlyDictionary.cs
- FileVersion.cs
- ButtonFieldBase.cs
- PriorityItem.cs
- MenuScrollingVisibilityConverter.cs
- ImageButton.cs
- MenuCommands.cs
- ObjectSet.cs
- UIElementAutomationPeer.cs
- XsltInput.cs
- ResourceDefaultValueAttribute.cs
- SmiMetaDataProperty.cs
- Button.cs
- PostBackOptions.cs
- control.ime.cs
- ProfileSection.cs
- DefinitionUpdate.cs
- HandlerWithFactory.cs
- DataControlImageButton.cs
- BaseAsyncResult.cs
- Query.cs
- BlurBitmapEffect.cs
- XmlTextReaderImplHelpers.cs
- HeaderUtility.cs
- Error.cs
- XslTransform.cs
- DataGridViewColumnCollection.cs
- DBSqlParserColumn.cs
- EventItfInfo.cs
- CSharpCodeProvider.cs
- QilUnary.cs
- ShutDownListener.cs
- ProgressBar.cs
- StandardCommands.cs
- Pkcs7Signer.cs
- AncestorChangedEventArgs.cs
- LogExtent.cs
- TakeOrSkipQueryOperator.cs
- XmlSchemaImport.cs
- InputBinder.cs
- TextFormatter.cs
- Mutex.cs
- SmtpAuthenticationManager.cs
- PropertyGridEditorPart.cs
- OleDbDataReader.cs
- SHA512.cs
- XamlReader.cs
- HwndSourceKeyboardInputSite.cs
- BitmapPalettes.cs
- FloatAverageAggregationOperator.cs
- ErasingStroke.cs
- OleStrCAMarshaler.cs
- DataGridCommandEventArgs.cs
- DataGridColumnCollection.cs
- GraphicsContainer.cs
- DiagnosticsConfiguration.cs
- RelationshipDetailsCollection.cs
- Overlapped.cs
- PeerEndPoint.cs
- safemediahandle.cs
- MemoryFailPoint.cs
- shaperfactory.cs
- WorkflowDebuggerSteppingAttribute.cs
- PropertyItemInternal.cs
- WebFaultClientMessageInspector.cs
- XmlIgnoreAttribute.cs
- TransformCollection.cs
- RegisterResponseInfo.cs
- RewritingValidator.cs
- Point.cs
- Compiler.cs
- Opcode.cs
- CheckBoxDesigner.cs
- Brush.cs
- WebPartsSection.cs
- FontInfo.cs
- HostSecurityManager.cs
- XmlSchemaValidationException.cs
- MessageQueueCriteria.cs
- ProviderIncompatibleException.cs
- WebPartMovingEventArgs.cs
- RC2.cs
- SystemTcpStatistics.cs
- Method.cs
- StreamDocument.cs
- XPathAncestorQuery.cs
- GridViewDesigner.cs
- SHA1.cs
- AppliesToBehaviorDecisionTable.cs
- GridViewCommandEventArgs.cs
- ViewBase.cs
- SpinWait.cs
- ConnectionManagementElementCollection.cs
- TextRangeEdit.cs
- FunctionOverloadResolver.cs
- SQLByte.cs
- UnsignedPublishLicense.cs