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
- EdmTypeAttribute.cs
- SubstitutionList.cs
- DocumentViewerBaseAutomationPeer.cs
- XPathNodeHelper.cs
- TextTrailingCharacterEllipsis.cs
- InputDevice.cs
- SizeLimitedCache.cs
- BufferedGraphics.cs
- SingleSelectRootGridEntry.cs
- SafeProcessHandle.cs
- XmlNodeList.cs
- Encoder.cs
- FileUtil.cs
- XmlNamespaceManager.cs
- EndpointDiscoveryMetadata.cs
- OracleBoolean.cs
- WebResourceAttribute.cs
- Timer.cs
- HwndPanningFeedback.cs
- CustomPopupPlacement.cs
- NumberAction.cs
- ThemeInfoAttribute.cs
- Journaling.cs
- InkSerializer.cs
- ConstraintCollection.cs
- UrlPath.cs
- ToolBarButton.cs
- ConstructorNeedsTagAttribute.cs
- CachedTypeface.cs
- PathGeometry.cs
- DataMisalignedException.cs
- SemanticResultValue.cs
- WorkflowService.cs
- ConnectionStringSettings.cs
- TypeSystem.cs
- SvcMapFileSerializer.cs
- EllipseGeometry.cs
- PageOutputColor.cs
- FreeIndexList.cs
- SplayTreeNode.cs
- SemaphoreFullException.cs
- BehaviorEditorPart.cs
- XPathAxisIterator.cs
- WebContentFormatHelper.cs
- MemberHolder.cs
- ImportCatalogPart.cs
- FormViewPageEventArgs.cs
- ComAdminWrapper.cs
- TextAction.cs
- MemoryMappedViewAccessor.cs
- BlockUIContainer.cs
- FontFamilyValueSerializer.cs
- VerticalAlignConverter.cs
- IdentityNotMappedException.cs
- BaseValidator.cs
- WindowHideOrCloseTracker.cs
- OptimizedTemplateContentHelper.cs
- Util.cs
- EmptyStringExpandableObjectConverter.cs
- GeneralTransformCollection.cs
- StateMachineTimers.cs
- DefaultWorkflowSchedulerService.cs
- NativeMethods.cs
- MonitoringDescriptionAttribute.cs
- HexParser.cs
- VisualStyleTypesAndProperties.cs
- CodeExporter.cs
- JsonWriterDelegator.cs
- ReceiveParametersContent.cs
- UnicodeEncoding.cs
- XmlNodeChangedEventArgs.cs
- RenderOptions.cs
- RequestCachePolicy.cs
- ListViewInsertionMark.cs
- __TransparentProxy.cs
- GenerateScriptTypeAttribute.cs
- CodeArrayCreateExpression.cs
- SaveFileDialog.cs
- InternalConfigEventArgs.cs
- ContainerUtilities.cs
- ModulesEntry.cs
- ProgressChangedEventArgs.cs
- DispatcherTimer.cs
- MergeFailedEvent.cs
- XmlStringTable.cs
- ImageAnimator.cs
- TrackBarRenderer.cs
- AbstractExpressions.cs
- TdsValueSetter.cs
- Rotation3DAnimationBase.cs
- _ShellExpression.cs
- CollectionsUtil.cs
- TypeLoadException.cs
- DoubleAnimationUsingKeyFrames.cs
- PeerNearMe.cs
- LifetimeManager.cs
- PropertyItem.cs
- Empty.cs
- SimpleParser.cs
- PageCatalogPartDesigner.cs