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
- DuplicateWaitObjectException.cs
- DataRowView.cs
- cache.cs
- RequestCacheValidator.cs
- XslTransform.cs
- ValueProviderWrapper.cs
- FileLoadException.cs
- InvalidComObjectException.cs
- StylusPointProperties.cs
- WorkflowIdleElement.cs
- httpserverutility.cs
- prompt.cs
- DecodeHelper.cs
- ResolvedKeyFrameEntry.cs
- SmiEventSink_Default.cs
- DependencyObject.cs
- QilUnary.cs
- NumberFunctions.cs
- Binding.cs
- XPathDescendantIterator.cs
- AppSecurityManager.cs
- ColumnMapTranslator.cs
- TextTreeRootTextBlock.cs
- ComplexPropertyEntry.cs
- AssociationProvider.cs
- DBCSCodePageEncoding.cs
- CompositeScriptReferenceEventArgs.cs
- RequestNavigateEventArgs.cs
- OracleConnectionFactory.cs
- AutoGeneratedFieldProperties.cs
- DiscreteKeyFrames.cs
- ZeroOpNode.cs
- RegexMatchCollection.cs
- ReaderContextStackData.cs
- KeyFrames.cs
- TypeDelegator.cs
- SystemEvents.cs
- SharedUtils.cs
- XmlSortKey.cs
- UdpMessageProperty.cs
- UnsafeNativeMethods.cs
- TextWriterTraceListener.cs
- XmlHierarchicalEnumerable.cs
- BufferedGraphics.cs
- ConstraintEnumerator.cs
- ObjectSpanRewriter.cs
- ItemsControl.cs
- DbBuffer.cs
- FilterableAttribute.cs
- PreviewKeyDownEventArgs.cs
- SizeValueSerializer.cs
- RepeaterCommandEventArgs.cs
- AutomationEventArgs.cs
- IpcClientManager.cs
- DataGridViewLayoutData.cs
- PeerContact.cs
- EntityDataSourceChangingEventArgs.cs
- AppearanceEditorPart.cs
- DataStreamFromComStream.cs
- ObjectComplexPropertyMapping.cs
- QueryNode.cs
- RtfControlWordInfo.cs
- ByteStack.cs
- XmlAttribute.cs
- NodeFunctions.cs
- InternalBufferOverflowException.cs
- ProtocolsSection.cs
- InheritedPropertyChangedEventArgs.cs
- WsdlParser.cs
- RemotingException.cs
- MSG.cs
- TerminateSequence.cs
- TransformerTypeCollection.cs
- DataGridViewImageColumn.cs
- PersistenceIOParticipant.cs
- RelationshipConverter.cs
- BindingsCollection.cs
- AddIn.cs
- ClientSettings.cs
- ParameterElementCollection.cs
- ObjectDisposedException.cs
- TextParagraphView.cs
- ObjectRef.cs
- Ops.cs
- PowerStatus.cs
- XamlSerializerUtil.cs
- UnmanagedMemoryStreamWrapper.cs
- TileBrush.cs
- CngAlgorithm.cs
- parserscommon.cs
- IntegerFacetDescriptionElement.cs
- CustomErrorCollection.cs
- PanelStyle.cs
- PeerName.cs
- Frame.cs
- ResourceAssociationTypeEnd.cs
- LineServicesCallbacks.cs
- Stackframe.cs
- SqlCommand.cs
- XmlUrlResolver.cs