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
- ObjectDataSourceDesigner.cs
- ColorTransform.cs
- CompilerGeneratedAttribute.cs
- QueryOutputWriter.cs
- JpegBitmapDecoder.cs
- Assert.cs
- CodeThrowExceptionStatement.cs
- FieldReference.cs
- UTF7Encoding.cs
- GridViewEditEventArgs.cs
- PersistenceMetadataNamespace.cs
- FormatterServicesNoSerializableCheck.cs
- Substitution.cs
- UriExt.cs
- WebPartUtil.cs
- SecurityNegotiationException.cs
- XmlSchemaDocumentation.cs
- ScriptMethodAttribute.cs
- CallbackException.cs
- ParenthesizePropertyNameAttribute.cs
- XmlAttributeOverrides.cs
- WindowsTitleBar.cs
- XmlByteStreamReader.cs
- Baml6Assembly.cs
- OptimizedTemplateContentHelper.cs
- SqlAggregateChecker.cs
- DataGridPagerStyle.cs
- FileUtil.cs
- QuaternionConverter.cs
- XmlIncludeAttribute.cs
- Avt.cs
- UserControlParser.cs
- NameTable.cs
- IntSecurity.cs
- RedBlackList.cs
- ConfigUtil.cs
- DataGridViewCell.cs
- EntityType.cs
- EventLog.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- DbConnectionStringCommon.cs
- XmlNode.cs
- RTLAwareMessageBox.cs
- AppDomainAttributes.cs
- CodeCatchClauseCollection.cs
- MailBnfHelper.cs
- WhileDesigner.cs
- DataGridViewColumnConverter.cs
- IPAddress.cs
- precedingquery.cs
- SkewTransform.cs
- DeclaredTypeElementCollection.cs
- UnsafeNativeMethodsPenimc.cs
- DataView.cs
- XmlEnumAttribute.cs
- PlainXmlWriter.cs
- WebPartsPersonalization.cs
- HttpWriter.cs
- AttributeEmitter.cs
- FontSizeConverter.cs
- InputChannelBinder.cs
- SRef.cs
- InternalCache.cs
- TimeZoneNotFoundException.cs
- XmlSchemaProviderAttribute.cs
- Token.cs
- CqlLexer.cs
- AsyncWaitHandle.cs
- InteropAutomationProvider.cs
- ContextQuery.cs
- FeatureSupport.cs
- TraceRecord.cs
- InstanceDataCollection.cs
- XmlNamespaceMapping.cs
- GridViewRowPresenterBase.cs
- IdentitySection.cs
- UnionCqlBlock.cs
- FastPropertyAccessor.cs
- FeatureSupport.cs
- WebBaseEventKeyComparer.cs
- MethodRental.cs
- HostProtectionPermission.cs
- VisualBrush.cs
- PiiTraceSource.cs
- Transform.cs
- ToolStripStatusLabel.cs
- XmlSchemaInfo.cs
- FileFormatException.cs
- TdsParserSessionPool.cs
- CqlGenerator.cs
- TemplateDefinition.cs
- XmlEncoding.cs
- SecurityContext.cs
- ExpressionHelper.cs
- FileFormatException.cs
- XmlWellformedWriter.cs
- DebugHandleTracker.cs
- InstanceHandleConflictException.cs
- StylusPointPropertyId.cs
- ListMarkerLine.cs