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
- MaskInputRejectedEventArgs.cs
- GenericUI.cs
- RegistryPermission.cs
- PropertyChangingEventArgs.cs
- XmlReflectionMember.cs
- XpsImage.cs
- ListParagraph.cs
- OutputCacheModule.cs
- dtdvalidator.cs
- DateTimeConstantAttribute.cs
- NavigationPropertyEmitter.cs
- BitmapEffectInputData.cs
- DecryptRequest.cs
- WeakEventManager.cs
- XmlSortKeyAccumulator.cs
- ErrorItem.cs
- SmiGettersStream.cs
- AssemblyBuilder.cs
- ItemPager.cs
- SoundPlayer.cs
- InputProviderSite.cs
- XmlSerializableServices.cs
- BindingFormattingDialog.cs
- DBConcurrencyException.cs
- ConfigXmlSignificantWhitespace.cs
- ToolStripInSituService.cs
- DllHostInitializer.cs
- TrackingStringDictionary.cs
- Stroke.cs
- SelectionRangeConverter.cs
- Thickness.cs
- WorkflowOperationFault.cs
- ContainerParaClient.cs
- HtmlControlDesigner.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- SmiEventSink_Default.cs
- XmlArrayItemAttributes.cs
- TableTextElementCollectionInternal.cs
- JournalNavigationScope.cs
- SolidBrush.cs
- HtmlForm.cs
- SQLDecimal.cs
- ImageDrawing.cs
- QueueProcessor.cs
- XmlAnyElementAttribute.cs
- UpdateProgress.cs
- Char.cs
- formatter.cs
- CustomError.cs
- TableSectionStyle.cs
- CutCopyPasteHelper.cs
- DataGridViewRowHeaderCell.cs
- RuleSettings.cs
- RoutedEventValueSerializer.cs
- SmtpReplyReaderFactory.cs
- HttpListenerRequest.cs
- MdImport.cs
- HierarchicalDataBoundControl.cs
- ThreadInterruptedException.cs
- DecoderFallback.cs
- Matrix3DStack.cs
- RangeValuePattern.cs
- Pen.cs
- DeviceContext2.cs
- XmlTextWriter.cs
- MenuStrip.cs
- UnsafeNativeMethodsTablet.cs
- webproxy.cs
- EncryptedPackage.cs
- BackgroundWorker.cs
- InlineObject.cs
- MatrixConverter.cs
- wgx_exports.cs
- Claim.cs
- AppSettingsExpressionBuilder.cs
- DateTimeUtil.cs
- Serializer.cs
- CopyCodeAction.cs
- FixedSOMPage.cs
- DataGridViewSelectedColumnCollection.cs
- EntityDataSourceContainerNameConverter.cs
- DesignBindingConverter.cs
- SoapDocumentServiceAttribute.cs
- DesignTimeData.cs
- BStrWrapper.cs
- VirtualPathData.cs
- MissingMemberException.cs
- CaseCqlBlock.cs
- WebPartDisplayModeCollection.cs
- _ConnectOverlappedAsyncResult.cs
- ScriptControl.cs
- DesignerSerializationOptionsAttribute.cs
- ContextMenuService.cs
- StringToken.cs
- RootDesignerSerializerAttribute.cs
- SafePipeHandle.cs
- Pen.cs
- TableCellCollection.cs
- MenuItem.cs
- PingOptions.cs