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
- CodeNamespace.cs
- BorderGapMaskConverter.cs
- TableLayoutPanelBehavior.cs
- EntityCollection.cs
- StateWorkerRequest.cs
- ProxyGenerationError.cs
- WebMessageBodyStyleHelper.cs
- SystemColors.cs
- PropertiesTab.cs
- SqlProfileProvider.cs
- ColorTranslator.cs
- XhtmlBasicListAdapter.cs
- TextRunCacheImp.cs
- StaticSiteMapProvider.cs
- ArrangedElement.cs
- HeaderPanel.cs
- WebPartCloseVerb.cs
- RightsManagementEncryptedStream.cs
- RSAPKCS1SignatureDeformatter.cs
- ParameterToken.cs
- WebBrowserBase.cs
- DataFormat.cs
- RtfToken.cs
- UrlPropertyAttribute.cs
- RawStylusInputReport.cs
- CapabilitiesPattern.cs
- ArrayList.cs
- BlockExpression.cs
- XmlEnumAttribute.cs
- ApplicationHost.cs
- CookielessHelper.cs
- ScrollBarAutomationPeer.cs
- AlphabeticalEnumConverter.cs
- XmlNamespaceMapping.cs
- ReadWriteSpinLock.cs
- SmtpCommands.cs
- CryptographicAttribute.cs
- ChtmlSelectionListAdapter.cs
- CaseStatementSlot.cs
- SqlParameterizer.cs
- CodeTypeReferenceExpression.cs
- FormsAuthenticationConfiguration.cs
- DataRowView.cs
- ContentDisposition.cs
- Rectangle.cs
- FormatConvertedBitmap.cs
- x509utils.cs
- PopupEventArgs.cs
- HiddenField.cs
- XamlReader.cs
- BrowserDefinitionCollection.cs
- CompoundFileStreamReference.cs
- SamlAttribute.cs
- CollectionConverter.cs
- _Events.cs
- XmlNamespaceMappingCollection.cs
- Int16AnimationUsingKeyFrames.cs
- GiveFeedbackEventArgs.cs
- TextServicesManager.cs
- ObjectListCommandCollection.cs
- SrgsElementFactoryCompiler.cs
- TextSelectionHighlightLayer.cs
- RoleGroup.cs
- ZoneButton.cs
- WebSysDescriptionAttribute.cs
- SafeNativeMethods.cs
- followingsibling.cs
- InputScopeConverter.cs
- FixedTextBuilder.cs
- Convert.cs
- FileReservationCollection.cs
- LinqDataSourceContextData.cs
- NamedPipeConnectionPool.cs
- ToolStripSplitStackLayout.cs
- HttpModuleCollection.cs
- HttpProfileGroupBase.cs
- AppDomainUnloadedException.cs
- CharacterHit.cs
- Label.cs
- HotSpotCollection.cs
- COM2ExtendedTypeConverter.cs
- DesignTimeDataBinding.cs
- WebPartVerbsEventArgs.cs
- ColorConvertedBitmap.cs
- KerberosSecurityTokenProvider.cs
- OutputCacheSection.cs
- CqlWriter.cs
- TextShapeableCharacters.cs
- StrongName.cs
- GridViewRowPresenterBase.cs
- GenericTypeParameterBuilder.cs
- Itemizer.cs
- SrgsNameValueTag.cs
- WorkItem.cs
- MD5.cs
- RowBinding.cs
- CodeNamespaceImport.cs
- XmlResolver.cs
- DbCommandDefinition.cs
- IdleTimeoutMonitor.cs