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
- ColumnTypeConverter.cs
- BuildProviderCollection.cs
- Table.cs
- GACIdentityPermission.cs
- ReceiveSecurityHeaderElementManager.cs
- PageStatePersister.cs
- BaseProcessor.cs
- hresults.cs
- PreservationFileReader.cs
- Hash.cs
- storagemappingitemcollection.viewdictionary.cs
- VSWCFServiceContractGenerator.cs
- MetafileHeaderWmf.cs
- IISUnsafeMethods.cs
- ListViewHitTestInfo.cs
- CodeAttributeDeclaration.cs
- ByteKeyFrameCollection.cs
- SecurityPolicyVersion.cs
- FollowerQueueCreator.cs
- WindowsUpDown.cs
- ToolStripSystemRenderer.cs
- CodeTypeConstructor.cs
- InvalidComObjectException.cs
- SR.cs
- ExecutionContext.cs
- DataServiceResponse.cs
- UnmanagedMarshal.cs
- CmsInterop.cs
- PassportAuthenticationModule.cs
- ValidationResult.cs
- RadioButton.cs
- Property.cs
- HttpWriter.cs
- XmlHierarchyData.cs
- RichTextBox.cs
- HtmlSelect.cs
- ScriptResourceInfo.cs
- Oci.cs
- RepeatButtonAutomationPeer.cs
- TranslateTransform.cs
- PermissionListSet.cs
- OleStrCAMarshaler.cs
- CodeRemoveEventStatement.cs
- StylusTip.cs
- WhitespaceSignificantCollectionAttribute.cs
- RadioButton.cs
- WindowsFormsHelpers.cs
- ObjectTag.cs
- Selector.cs
- UnsafeNativeMethods.cs
- HtmlImageAdapter.cs
- CompilerInfo.cs
- DataObjectEventArgs.cs
- DescendantQuery.cs
- LinkedResourceCollection.cs
- HttpRawResponse.cs
- InputLangChangeRequestEvent.cs
- ReadOnlyTernaryTree.cs
- PersonalizationProvider.cs
- EntityDataSourceViewSchema.cs
- CollectionsUtil.cs
- XomlDesignerLoader.cs
- _WinHttpWebProxyDataBuilder.cs
- Exceptions.cs
- AuthenticationModulesSection.cs
- TreeNodeCollection.cs
- PropertyMap.cs
- X509Extension.cs
- DataGridCaption.cs
- DocumentScope.cs
- DataGridPreparingCellForEditEventArgs.cs
- PrinterSettings.cs
- GeometryCollection.cs
- CriticalHandle.cs
- PageParserFilter.cs
- Drawing.cs
- ElementsClipboardData.cs
- WebPartDisplayModeEventArgs.cs
- OracleDataAdapter.cs
- Assert.cs
- WorkflowExecutor.cs
- PaperSource.cs
- DataListCommandEventArgs.cs
- BuilderPropertyEntry.cs
- EdmProperty.cs
- CodeCompiler.cs
- NameService.cs
- TimelineCollection.cs
- CodeArrayCreateExpression.cs
- CharacterString.cs
- CommunicationException.cs
- UIServiceHelper.cs
- Internal.cs
- SendMailErrorEventArgs.cs
- PropertyItemInternal.cs
- ControlUtil.cs
- SoapDocumentServiceAttribute.cs
- UIntPtr.cs
- BinaryMethodMessage.cs
- DbParameterCollection.cs