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
- HTMLTextWriter.cs
- Hex.cs
- Assert.cs
- ScrollData.cs
- Models.cs
- ConfigurationManagerHelperFactory.cs
- AutoResetEvent.cs
- EventMappingSettings.cs
- IteratorDescriptor.cs
- SequentialOutput.cs
- SmiRecordBuffer.cs
- Themes.cs
- ContentFilePart.cs
- MemberPath.cs
- UndoManager.cs
- CommunicationObject.cs
- ArgumentsParser.cs
- StylusSystemGestureEventArgs.cs
- ToolStripButton.cs
- PropertyNames.cs
- DataRowCollection.cs
- PerfCounters.cs
- X509ChainElement.cs
- TextInfo.cs
- UIPropertyMetadata.cs
- CookielessHelper.cs
- TextBoxRenderer.cs
- UpdateCompiler.cs
- GPPOINTF.cs
- UseAttributeSetsAction.cs
- TimeStampChecker.cs
- Main.cs
- TTSEngineProxy.cs
- XmlSerializationWriter.cs
- TemplatePagerField.cs
- DiagnosticsConfigurationHandler.cs
- ToolboxCategory.cs
- ToolStripDropDownClosedEventArgs.cs
- OdbcConnectionOpen.cs
- AsymmetricAlgorithm.cs
- ObjectItemCollection.cs
- CancelEventArgs.cs
- DataBinding.cs
- PhysicalAddress.cs
- TreeViewEvent.cs
- TagNameToTypeMapper.cs
- ClearTypeHintValidation.cs
- SqlWriter.cs
- StrokeIntersection.cs
- CodeAccessSecurityEngine.cs
- NumberSubstitution.cs
- ComboBox.cs
- ResourceDescriptionAttribute.cs
- SqlDataSourceEnumerator.cs
- BuilderInfo.cs
- ProfessionalColorTable.cs
- SQLConvert.cs
- WebPartTransformer.cs
- SliderAutomationPeer.cs
- FixedTextView.cs
- HttpStaticObjectsCollectionBase.cs
- UrlMappingCollection.cs
- SaveFileDialog.cs
- FileAuthorizationModule.cs
- WebPartHeaderCloseVerb.cs
- ChannelDispatcherBase.cs
- XmlSchemaSet.cs
- XmlAnyElementAttribute.cs
- PersistenceException.cs
- DataGridViewColumnEventArgs.cs
- BufferBuilder.cs
- ObjectToken.cs
- DataSysAttribute.cs
- ChangeToolStripParentVerb.cs
- CompositeTypefaceMetrics.cs
- ExclusiveTcpTransportManager.cs
- TextDecorationLocationValidation.cs
- ReceiveActivityDesigner.cs
- SessionEndingEventArgs.cs
- CopyCodeAction.cs
- TableDesigner.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- HWStack.cs
- CodeDefaultValueExpression.cs
- DocumentGridPage.cs
- DynamicILGenerator.cs
- IProducerConsumerCollection.cs
- PropertySegmentSerializer.cs
- ResolveNameEventArgs.cs
- DefaultBinder.cs
- VersionUtil.cs
- WorkflowFileItem.cs
- UIElement.cs
- ProgressiveCrcCalculatingStream.cs
- SettingsAttributes.cs
- CryptoProvider.cs
- OleDbConnectionInternal.cs
- KeyEvent.cs
- _ListenerAsyncResult.cs
- AppSettingsExpressionEditor.cs