Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / UI / WebControls / Expressions / OrderByExpression.cs / 1305376 / OrderByExpression.cs
#if ORYX_VNEXT namespace Microsoft.Web.Data.UI.WebControls.Expressions { using System.Web; using System.Web.UI.WebControls; #else namespace System.Web.UI.WebControls.Expressions { #endif using System; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; using System.Web.Resources; using System.Web.UI; [ PersistChildren(false), ParseChildren(true, "ThenByExpressions") ] public class OrderByExpression : DataSourceExpression { private const string OrderByMethod = "OrderBy"; private const string ThenByMethod = "ThenBy"; private const string OrderDescendingByMethod = "OrderByDescending"; private const string ThenDescendingByMethod = "ThenByDescending"; private Collection_thenByExpressions; public string DataField { get { return (string)ViewState["DataField"] ?? String.Empty; } set { ViewState["DataField"] = value; } } public SortDirection Direction { get { object o = ViewState["Direction"]; return o != null ? (SortDirection)o : SortDirection.Ascending; } set { ViewState["Direction"] = value; } } [PersistenceMode(PersistenceMode.InnerDefaultProperty)] public Collection ThenByExpressions { get { if (_thenByExpressions == null) { // _thenByExpressions = new Collection (); } return _thenByExpressions; } } public override IQueryable GetQueryable(IQueryable source) { if (source == null) { return null; } if (String.IsNullOrEmpty(DataField)) { throw new InvalidOperationException(AtlasWeb.Expressions_DataFieldRequired); } ParameterExpression pe = Expression.Parameter(source.ElementType, String.Empty); source = CreateSortQueryable(source, pe, Direction, DataField, false /* isThenBy */); foreach (ThenBy thenBy in ThenByExpressions) { source = CreateSortQueryable(source, pe, thenBy.Direction, thenBy.DataField, true /* isThenBy */); } return source; } private static IQueryable CreateSortQueryable(IQueryable source, ParameterExpression parameterExpression, SortDirection direction, string dataField, bool isThenBy) { string methodName = isThenBy ? GetThenBySortMethod(direction) : GetSortMethod(direction); Expression propertyExpression = ExpressionHelper.CreatePropertyExpression(parameterExpression, dataField); return source.Call(methodName, Expression.Lambda(propertyExpression, parameterExpression), source.ElementType, propertyExpression.Type); } private static string GetSortMethod(SortDirection direction) { switch (direction) { case SortDirection.Ascending: return OrderByMethod; case SortDirection.Descending: return OrderDescendingByMethod; default: Debug.Fail("shouldn't get here!"); return OrderByMethod; } } private static string GetThenBySortMethod(SortDirection direction) { switch (direction) { case SortDirection.Ascending: return ThenByMethod; case SortDirection.Descending: return ThenDescendingByMethod; default: Debug.Fail("shouldn't get here!"); return null; } } } } // 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
- EdgeModeValidation.cs
- COSERVERINFO.cs
- OracleException.cs
- Mutex.cs
- PrincipalPermission.cs
- SqlVersion.cs
- BookmarkOptionsHelper.cs
- EventBuilder.cs
- GridViewRow.cs
- MethodBuilderInstantiation.cs
- ContextInformation.cs
- Simplifier.cs
- XmlWellformedWriter.cs
- FileSystemInfo.cs
- NameTable.cs
- ConfigXmlCDataSection.cs
- UrlRoutingModule.cs
- CapiHashAlgorithm.cs
- QualificationDataAttribute.cs
- DataGridColumnCollection.cs
- XmlComplianceUtil.cs
- CommunicationException.cs
- XPathNavigatorReader.cs
- As.cs
- RotateTransform3D.cs
- UserControlAutomationPeer.cs
- DataGridViewCellCancelEventArgs.cs
- BaseServiceProvider.cs
- COM2TypeInfoProcessor.cs
- ArcSegment.cs
- WebZone.cs
- AesManaged.cs
- AsyncPostBackTrigger.cs
- Parser.cs
- XamlWriterExtensions.cs
- RepeaterItemEventArgs.cs
- ComponentDispatcherThread.cs
- SystemIPAddressInformation.cs
- ListSourceHelper.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- Misc.cs
- XamlReader.cs
- BrowserCapabilitiesFactory35.cs
- ViewPort3D.cs
- SelectionGlyphBase.cs
- Message.cs
- MatrixConverter.cs
- DefaultHttpHandler.cs
- ThrowHelper.cs
- HashSetEqualityComparer.cs
- XsltOutput.cs
- Visitor.cs
- PrePrepareMethodAttribute.cs
- Logging.cs
- FixedTextView.cs
- Serializer.cs
- CellConstant.cs
- TTSEvent.cs
- SqlCrossApplyToCrossJoin.cs
- PathTooLongException.cs
- _SSPISessionCache.cs
- FixedSOMGroup.cs
- FontUnitConverter.cs
- TraceHandler.cs
- WorkflowMarkupSerializationException.cs
- XmlTextAttribute.cs
- RtfFormatStack.cs
- WebPartZoneCollection.cs
- XmlLanguage.cs
- RoleServiceManager.cs
- PointUtil.cs
- LoggedException.cs
- ThreadInterruptedException.cs
- GradientStopCollection.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- SafeUserTokenHandle.cs
- RuntimeCompatibilityAttribute.cs
- HttpConfigurationContext.cs
- FolderNameEditor.cs
- ThumbButtonInfoCollection.cs
- PromptStyle.cs
- XPathException.cs
- KeyInstance.cs
- PeerObject.cs
- HWStack.cs
- sqlcontext.cs
- DurableInstanceProvider.cs
- DetailsViewCommandEventArgs.cs
- EntryPointNotFoundException.cs
- XmlTextReaderImplHelpers.cs
- Input.cs
- TdsParserHelperClasses.cs
- SqlInternalConnection.cs
- PolicyAssertionCollection.cs
- AssemblyResourceLoader.cs
- SubclassTypeValidatorAttribute.cs
- PersonalizableAttribute.cs
- SimpleType.cs
- PinnedBufferMemoryStream.cs
- Serializer.cs