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
- DataGridCaption.cs
- XmlSerializerFactory.cs
- DataMemberFieldEditor.cs
- CfgRule.cs
- RegisteredArrayDeclaration.cs
- ColumnWidthChangingEvent.cs
- SettingsBase.cs
- XmlFormatReaderGenerator.cs
- SmtpCommands.cs
- MemberPath.cs
- HashFinalRequest.cs
- WebAdminConfigurationHelper.cs
- SystemIcons.cs
- XmlEntityReference.cs
- PeerCollaborationPermission.cs
- OutputCache.cs
- ImmComposition.cs
- PenThreadPool.cs
- WebPartConnectionsCancelVerb.cs
- ResizeGrip.cs
- RowToFieldTransformer.cs
- CqlWriter.cs
- ConnectionManagementSection.cs
- SystemIPAddressInformation.cs
- Types.cs
- FileStream.cs
- RemoteWebConfigurationHostServer.cs
- ToolStripGrip.cs
- KeyedCollection.cs
- Sequence.cs
- PassportAuthenticationModule.cs
- TypeListConverter.cs
- WebSysDescriptionAttribute.cs
- ProgressBarRenderer.cs
- AsymmetricSignatureFormatter.cs
- WmlObjectListAdapter.cs
- PathSegment.cs
- InputBinder.cs
- XamlPathDataSerializer.cs
- DotExpr.cs
- SkewTransform.cs
- SecurityTokenContainer.cs
- BuildDependencySet.cs
- ListViewCommandEventArgs.cs
- CustomErrorsSection.cs
- ReaderContextStackData.cs
- ControlDesigner.cs
- PlainXmlDeserializer.cs
- PasswordBox.cs
- ReadOnlyNameValueCollection.cs
- InternalCache.cs
- DefinitionProperties.cs
- DataGridViewComboBoxColumn.cs
- OrthographicCamera.cs
- HttpConfigurationContext.cs
- EntityCommandExecutionException.cs
- MessageVersionConverter.cs
- CompilerResults.cs
- WebPartsSection.cs
- MenuItem.cs
- QuotedPrintableStream.cs
- SqlUdtInfo.cs
- Point4DConverter.cs
- CryptoKeySecurity.cs
- CompilerTypeWithParams.cs
- SafeProcessHandle.cs
- WmlMobileTextWriter.cs
- SecureEnvironment.cs
- InvalidDataException.cs
- ToolStripLabel.cs
- ManagedFilter.cs
- SubqueryRules.cs
- OdbcConnectionFactory.cs
- MarkerProperties.cs
- ScriptReferenceEventArgs.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- WCFModelStrings.Designer.cs
- VarInfo.cs
- XmlSchemaComplexContentRestriction.cs
- SqlBulkCopyColumnMapping.cs
- MemberDomainMap.cs
- panel.cs
- EntityStoreSchemaFilterEntry.cs
- DESCryptoServiceProvider.cs
- Button.cs
- TreeNodeCollection.cs
- SqlComparer.cs
- DiscoveryInnerClientManaged11.cs
- HttpModulesSection.cs
- PopupRootAutomationPeer.cs
- TdsParserStaticMethods.cs
- cookiecollection.cs
- XmlSchemaSimpleTypeList.cs
- X509AsymmetricSecurityKey.cs
- SerialStream.cs
- DrawListViewSubItemEventArgs.cs
- EditingCommands.cs
- List.cs
- CodeIterationStatement.cs
- SafeNativeMethodsCLR.cs