Code:
/ 4.0 / 4.0 / 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. #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
- Quaternion.cs
- DBParameter.cs
- SecurityResources.cs
- BoundPropertyEntry.cs
- SystemIPGlobalProperties.cs
- MultiAsyncResult.cs
- XXXInfos.cs
- ColumnMapVisitor.cs
- ScalarType.cs
- VectorAnimationBase.cs
- DetailsViewRowCollection.cs
- TrustManagerMoreInformation.cs
- X500Name.cs
- KeyValuePair.cs
- RelationshipType.cs
- NativeMethods.cs
- UserMapPath.cs
- ApplicationSecurityManager.cs
- PageCache.cs
- LinkButton.cs
- KerberosReceiverSecurityToken.cs
- DecoratedNameAttribute.cs
- FormViewDesigner.cs
- SmiRecordBuffer.cs
- WasHostedComPlusFactory.cs
- SafeRightsManagementSessionHandle.cs
- PenThreadWorker.cs
- TextUtf8RawTextWriter.cs
- XamlSerializationHelper.cs
- WmlLabelAdapter.cs
- HttpCookie.cs
- SchemaType.cs
- BinaryUtilClasses.cs
- ConstructorBuilder.cs
- DesignerProperties.cs
- XmlSchemaSet.cs
- Transform3DGroup.cs
- Cursors.cs
- SerializationObjectManager.cs
- MaxValueConverter.cs
- Scene3D.cs
- AppDomainAttributes.cs
- DuplicateWaitObjectException.cs
- EntityModelBuildProvider.cs
- Command.cs
- WindowsToolbar.cs
- BaseParaClient.cs
- ImportContext.cs
- MenuItemCollectionEditor.cs
- Column.cs
- GenerateTemporaryAssemblyTask.cs
- Tracking.cs
- HttpHandlersSection.cs
- CodeCastExpression.cs
- CompositeCollectionView.cs
- RemotingConfigParser.cs
- PrivilegeNotHeldException.cs
- ValueOfAction.cs
- RetrieveVirtualItemEventArgs.cs
- ToolboxComponentsCreatedEventArgs.cs
- NotSupportedException.cs
- FontNamesConverter.cs
- PresentationTraceSources.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- Oid.cs
- PrtCap_Public_Simple.cs
- MemberExpressionHelper.cs
- TextPattern.cs
- Pen.cs
- SponsorHelper.cs
- TimeoutException.cs
- PointLightBase.cs
- FilteredDataSetHelper.cs
- DummyDataSource.cs
- InteropBitmapSource.cs
- RsaSecurityKey.cs
- CompModSwitches.cs
- TreeNodeStyle.cs
- BoundingRectTracker.cs
- CompiledQuery.cs
- DataControlLinkButton.cs
- PropertyValueUIItem.cs
- WindowsFormsSynchronizationContext.cs
- Brush.cs
- CreateRefExpr.cs
- EventWaitHandleSecurity.cs
- PersistenceTypeAttribute.cs
- ModelFunctionTypeElement.cs
- _KerberosClient.cs
- UnsafeNetInfoNativeMethods.cs
- BamlLocalizableResourceKey.cs
- Shape.cs
- CodeAccessPermission.cs
- XmlLoader.cs
- TraceSection.cs
- InternalTypeHelper.cs
- DefaultEvaluationContext.cs
- DataGridTextBoxColumn.cs
- PageParser.cs