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
- BamlRecordWriter.cs
- PreviewPageInfo.cs
- TextChange.cs
- DataGridClipboardHelper.cs
- FrameworkTextComposition.cs
- GridViewDeletedEventArgs.cs
- BasicViewGenerator.cs
- BuildProvider.cs
- MachineKeySection.cs
- DelegateSerializationHolder.cs
- DelegatingConfigHost.cs
- Delay.cs
- StreamGeometry.cs
- TrackingRecordPreFilter.cs
- PropertyDescriptor.cs
- TextSelection.cs
- PersonalizationState.cs
- GridViewRow.cs
- SafeRightsManagementSessionHandle.cs
- EdmType.cs
- MachineSettingsSection.cs
- DataServiceCollectionOfT.cs
- WinEventQueueItem.cs
- SelectionProcessor.cs
- XmlValidatingReaderImpl.cs
- WindowsGraphics.cs
- InstalledFontCollection.cs
- SerializationEventsCache.cs
- DataObjectSettingDataEventArgs.cs
- Delay.cs
- _UriTypeConverter.cs
- SelectionProcessor.cs
- TableItemStyle.cs
- HttpRequestWrapper.cs
- RegisteredArrayDeclaration.cs
- ListManagerBindingsCollection.cs
- ConstantProjectedSlot.cs
- Header.cs
- PolyQuadraticBezierSegment.cs
- TreeBuilder.cs
- FlowLayout.cs
- CompilerResults.cs
- SolidBrush.cs
- UserThread.cs
- GenerateScriptTypeAttribute.cs
- XslTransform.cs
- RoleGroup.cs
- GeneralTransform3DTo2DTo3D.cs
- Trustee.cs
- SafeEventLogWriteHandle.cs
- xmlglyphRunInfo.cs
- SortedDictionary.cs
- SqlProvider.cs
- XPathDocumentBuilder.cs
- CharUnicodeInfo.cs
- WorkflowControlClient.cs
- OAVariantLib.cs
- DataObjectAttribute.cs
- SqlInternalConnectionTds.cs
- BitmapEffectGeneralTransform.cs
- Reference.cs
- SystemUdpStatistics.cs
- PlatformCulture.cs
- PathGradientBrush.cs
- SignatureToken.cs
- LinearGradientBrush.cs
- uribuilder.cs
- OrderByLifter.cs
- SafeArrayRankMismatchException.cs
- UICuesEvent.cs
- Util.cs
- QilLiteral.cs
- CryptoConfig.cs
- StorageAssociationSetMapping.cs
- GeometryCollection.cs
- HttpCacheParams.cs
- SQLSingleStorage.cs
- ClientRoleProvider.cs
- GACIdentityPermission.cs
- CharacterShapingProperties.cs
- Camera.cs
- NumberEdit.cs
- DataRecordObjectView.cs
- ToolStripRenderEventArgs.cs
- XamlInt32CollectionSerializer.cs
- ContractNamespaceAttribute.cs
- TabRenderer.cs
- ToolStripSplitStackLayout.cs
- DbCommandTree.cs
- HtmlElement.cs
- RegexWorker.cs
- MetadataFile.cs
- NullableIntSumAggregationOperator.cs
- StringFreezingAttribute.cs
- QilNode.cs
- TextWriter.cs
- MethodRental.cs
- BezierSegment.cs
- SubtreeProcessor.cs
- QilFactory.cs