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
- TextTreeObjectNode.cs
- XmlReaderSettings.cs
- EntityDataSourceSelectedEventArgs.cs
- BooleanStorage.cs
- VariantWrapper.cs
- EventHandlersStore.cs
- MachinePropertyVariants.cs
- SmtpException.cs
- CompositeFontParser.cs
- SqlUtils.cs
- KeyFrames.cs
- CodeTypeDeclarationCollection.cs
- WebConfigurationHostFileChange.cs
- DataGridViewColumnHeaderCell.cs
- RootBrowserWindowProxy.cs
- ProcessModule.cs
- Opcode.cs
- EntityProviderFactory.cs
- XmlSchema.cs
- COAUTHINFO.cs
- TypeReference.cs
- WebHeaderCollection.cs
- RootProfilePropertySettingsCollection.cs
- Converter.cs
- JsonReader.cs
- ObservableCollectionDefaultValueFactory.cs
- SqlTypeConverter.cs
- PassportAuthenticationEventArgs.cs
- Table.cs
- updatecommandorderer.cs
- AutoGeneratedField.cs
- DateTime.cs
- UdpTransportSettingsElement.cs
- ToolStripSeparator.cs
- HttpPostProtocolImporter.cs
- versioninfo.cs
- StrokeNodeData.cs
- CommonProperties.cs
- FormParameter.cs
- PagedDataSource.cs
- JsonDeserializer.cs
- LocalizedNameDescriptionPair.cs
- BoolExpr.cs
- CommandValueSerializer.cs
- FeatureManager.cs
- CompiledQueryCacheEntry.cs
- DropDownList.cs
- RSACryptoServiceProvider.cs
- JobDuplex.cs
- ProfileSettings.cs
- RepeaterItemEventArgs.cs
- UncommonField.cs
- CapabilitiesSection.cs
- ComponentCommands.cs
- ApplicationId.cs
- ConfigurationSectionGroup.cs
- DecimalFormatter.cs
- SliderAutomationPeer.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- TransactionContextValidator.cs
- FieldDescriptor.cs
- GrammarBuilderWildcard.cs
- ProfilePropertyMetadata.cs
- PostBackOptions.cs
- FormsAuthenticationCredentials.cs
- XPathNodeInfoAtom.cs
- XPathAncestorQuery.cs
- COM2IPerPropertyBrowsingHandler.cs
- TypedReference.cs
- NoneExcludedImageIndexConverter.cs
- OdbcReferenceCollection.cs
- WindowsUpDown.cs
- RenderDataDrawingContext.cs
- ExpressionParser.cs
- Environment.cs
- RankException.cs
- DispatchOperationRuntime.cs
- DataBoundLiteralControl.cs
- Stackframe.cs
- ModulesEntry.cs
- DataGridViewRowStateChangedEventArgs.cs
- IDataContractSurrogate.cs
- DictionarySectionHandler.cs
- XmlnsDictionary.cs
- GradientStopCollection.cs
- EditorAttribute.cs
- Bitmap.cs
- WindowsToolbarAsMenu.cs
- ConfigurationManagerHelperFactory.cs
- BrowserCapabilitiesFactory.cs
- DataRowChangeEvent.cs
- EpmContentSerializerBase.cs
- AuthorizationSection.cs
- MobileErrorInfo.cs
- SharedPersonalizationStateInfo.cs
- SettingsSavedEventArgs.cs
- SelectionPattern.cs
- diagnosticsswitches.cs
- TrackingDataItem.cs
- HttpInputStream.cs