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
- FixedTextPointer.cs
- CachingHintValidation.cs
- TypeConverterHelper.cs
- TemplatePropertyEntry.cs
- Label.cs
- MemberCollection.cs
- DataListCommandEventArgs.cs
- ISAPIRuntime.cs
- PropertyEmitterBase.cs
- XamlReaderHelper.cs
- WebServicesSection.cs
- odbcmetadatacolumnnames.cs
- Command.cs
- ListControl.cs
- ProfileManager.cs
- bindurihelper.cs
- WebMessageFormatHelper.cs
- HeaderedItemsControl.cs
- ImageSourceConverter.cs
- Decimal.cs
- PerformanceCounterLib.cs
- DataGridItemCollection.cs
- BasicViewGenerator.cs
- EpmTargetTree.cs
- ListSourceHelper.cs
- ACL.cs
- RectangleGeometry.cs
- MenuCommand.cs
- OpenCollectionAsyncResult.cs
- SqlBooleanizer.cs
- XmlDataLoader.cs
- UserMapPath.cs
- DrawingBrush.cs
- EnvironmentPermission.cs
- ControlOperationInvoker.cs
- FormattedText.cs
- DbExpressionRules.cs
- ReachDocumentReferenceSerializer.cs
- RecognizedAudio.cs
- WebPartConnectionsEventArgs.cs
- MessageDecoder.cs
- WmpBitmapEncoder.cs
- PropertyGrid.cs
- ConsumerConnectionPointCollection.cs
- ResourceReader.cs
- AdditionalEntityFunctions.cs
- dtdvalidator.cs
- StagingAreaInputItem.cs
- EnumValAlphaComparer.cs
- MemberInfoSerializationHolder.cs
- PropertyInfoSet.cs
- invalidudtexception.cs
- XpsStructure.cs
- StreamSecurityUpgradeAcceptorAsyncResult.cs
- XmlName.cs
- ApplicationInfo.cs
- ClientConvert.cs
- BrowserCapabilitiesFactoryBase.cs
- WebHttpBehavior.cs
- RefreshEventArgs.cs
- ObjectViewEntityCollectionData.cs
- FactoryGenerator.cs
- HtmlElementErrorEventArgs.cs
- FormViewInsertedEventArgs.cs
- DiscoveryInnerClientManaged11.cs
- DataGridTable.cs
- CompilerHelpers.cs
- CodeIndexerExpression.cs
- itemelement.cs
- PassportIdentity.cs
- SqlRowUpdatingEvent.cs
- PositiveTimeSpanValidatorAttribute.cs
- MembershipValidatePasswordEventArgs.cs
- LoadedOrUnloadedOperation.cs
- XmlSchemaException.cs
- DocumentGridPage.cs
- Vector3DValueSerializer.cs
- RefType.cs
- ObjectToIdCache.cs
- DispatcherHookEventArgs.cs
- Attributes.cs
- PkcsUtils.cs
- XsdCachingReader.cs
- ListViewDeleteEventArgs.cs
- NativeCompoundFileAPIs.cs
- SyndicationItem.cs
- StaticFileHandler.cs
- ProfileService.cs
- PolygonHotSpot.cs
- TextComposition.cs
- CodeNamespace.cs
- HashRepartitionEnumerator.cs
- DocumentNUp.cs
- DocumentOrderComparer.cs
- ToolStripScrollButton.cs
- TextContainerChangedEventArgs.cs
- XslAstAnalyzer.cs
- XmlSchemaNotation.cs
- CalendarAutoFormat.cs
- OperatorExpressions.cs