Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / UI / WebControls / Expressions / ExpressionHelper.cs / 1305376 / ExpressionHelper.cs
#if ORYX_VNEXT namespace Microsoft.Web.Data.UI.WebControls.Expressions { #else namespace System.Web.UI.WebControls.Expressions { #endif using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; internal static class ExpressionHelper { public static Expression GetValue(Expression exp) { Type realType = GetUnderlyingType(exp.Type); if (realType == exp.Type) { return exp; } return Expression.Convert(exp, realType); } public static Type GetUnderlyingType(Type type) { // Get the type from Nullable types if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { return type.GetGenericArguments()[0]; } return type; } public static object BuildObjectValue(object value, Type type) { #if ORYX_VNEXT return Microsoft.Web.Data.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #else return System.Web.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #endif } public static Expression CreatePropertyExpression(Expression parameterExpression, string propertyName) { if (parameterExpression == null) { return null; } if (String.IsNullOrEmpty(propertyName)) { return null; } Expression propExpression = null; string[] props = propertyName.Split('.'); foreach (var p in props) { if (propExpression == null) { propExpression = Expression.PropertyOrField(parameterExpression, p); } else { propExpression = Expression.PropertyOrField(propExpression, p); } } return propExpression; } public static IQueryable Where(this IQueryable source, LambdaExpression lambda) { return Call(source, "Where", lambda, source.ElementType); } public static IQueryable Call(this IQueryable source, string queryMethod, Type[] genericArgs, params Expression[] arguments) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryMethod, genericArgs, arguments)); } public static IQueryable Call(this IQueryable source, string queryableMethod, LambdaExpression lambda, params Type[] genericArgs) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryableMethod, genericArgs, source.Expression, Expression.Quote(lambda))); } public static Expression Or(IEnumerableexpressions) { Expression orExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (orExpression == null) { orExpression = e; } else { orExpression = Expression.OrElse(orExpression, e); } } return orExpression; } public static Expression And(IEnumerable expressions) { Expression andExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (andExpression == null) { andExpression = e; } else { andExpression = Expression.AndAlso(andExpression, e); } } return andExpression; } } } // 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 { #else namespace System.Web.UI.WebControls.Expressions { #endif using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; internal static class ExpressionHelper { public static Expression GetValue(Expression exp) { Type realType = GetUnderlyingType(exp.Type); if (realType == exp.Type) { return exp; } return Expression.Convert(exp, realType); } public static Type GetUnderlyingType(Type type) { // Get the type from Nullable types if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { return type.GetGenericArguments()[0]; } return type; } public static object BuildObjectValue(object value, Type type) { #if ORYX_VNEXT return Microsoft.Web.Data.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #else return System.Web.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #endif } public static Expression CreatePropertyExpression(Expression parameterExpression, string propertyName) { if (parameterExpression == null) { return null; } if (String.IsNullOrEmpty(propertyName)) { return null; } Expression propExpression = null; string[] props = propertyName.Split('.'); foreach (var p in props) { if (propExpression == null) { propExpression = Expression.PropertyOrField(parameterExpression, p); } else { propExpression = Expression.PropertyOrField(propExpression, p); } } return propExpression; } public static IQueryable Where(this IQueryable source, LambdaExpression lambda) { return Call(source, "Where", lambda, source.ElementType); } public static IQueryable Call(this IQueryable source, string queryMethod, Type[] genericArgs, params Expression[] arguments) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryMethod, genericArgs, arguments)); } public static IQueryable Call(this IQueryable source, string queryableMethod, LambdaExpression lambda, params Type[] genericArgs) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryableMethod, genericArgs, source.Expression, Expression.Quote(lambda))); } public static Expression Or(IEnumerable expressions) { Expression orExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (orExpression == null) { orExpression = e; } else { orExpression = Expression.OrElse(orExpression, e); } } return orExpression; } public static Expression And(IEnumerable expressions) { Expression andExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (andExpression == null) { andExpression = e; } else { andExpression = Expression.AndAlso(andExpression, e); } } return andExpression; } } } // 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
- TextRange.cs
- Privilege.cs
- ReceiveErrorHandling.cs
- StorageInfo.cs
- DeviceFilterDictionary.cs
- DockPattern.cs
- SecurityKeyIdentifierClause.cs
- DataPointer.cs
- EndOfStreamException.cs
- SqlClientMetaDataCollectionNames.cs
- FileLevelControlBuilderAttribute.cs
- AnimationClock.cs
- VersionedStream.cs
- AsyncSerializedWorker.cs
- ByteStreamMessageEncoderFactory.cs
- SmuggledIUnknown.cs
- UnsafeNativeMethods.cs
- ProxyGenerationError.cs
- EventLogInformation.cs
- KerberosSecurityTokenAuthenticator.cs
- Mouse.cs
- tooltip.cs
- VirtualDirectoryMappingCollection.cs
- WorkflowService.cs
- Component.cs
- MachineKeySection.cs
- MultiAsyncResult.cs
- ModelItemCollectionImpl.cs
- DiscreteKeyFrames.cs
- ModelPerspective.cs
- RouteItem.cs
- ProfilePropertySettingsCollection.cs
- OutputWindow.cs
- CodeLabeledStatement.cs
- RemoteAsymmetricSignatureFormatter.cs
- ReadOnlyObservableCollection.cs
- CancelEventArgs.cs
- FormsAuthenticationModule.cs
- DBDataPermission.cs
- BaseParaClient.cs
- EventMappingSettings.cs
- IgnoreFileBuildProvider.cs
- FileSecurity.cs
- VisualStateGroup.cs
- StorageEndPropertyMapping.cs
- RelationshipConstraintValidator.cs
- SoapAttributeOverrides.cs
- ExpressionEditorAttribute.cs
- JsonReader.cs
- SortQueryOperator.cs
- NetSectionGroup.cs
- XmlRawWriterWrapper.cs
- DoubleAnimation.cs
- CommandSet.cs
- MatrixTransform3D.cs
- CommonGetThemePartSize.cs
- PageCodeDomTreeGenerator.cs
- CrossSiteScriptingValidation.cs
- ObjectSecurity.cs
- ImageSource.cs
- Bezier.cs
- DateTimeAutomationPeer.cs
- Interlocked.cs
- TextUtf8RawTextWriter.cs
- XmlLanguageConverter.cs
- CardSpaceSelector.cs
- IsolatedStorage.cs
- SafeUserTokenHandle.cs
- FontSizeConverter.cs
- XslNumber.cs
- KeyConstraint.cs
- XPathNavigator.cs
- MapPathBasedVirtualPathProvider.cs
- TraversalRequest.cs
- Highlights.cs
- CacheDependency.cs
- ToolZoneDesigner.cs
- RegistryKey.cs
- ParameterBuilder.cs
- XmlException.cs
- CodeSpit.cs
- SHA256.cs
- GenericPrincipal.cs
- AffineTransform3D.cs
- TextBoxBase.cs
- DecoderFallbackWithFailureFlag.cs
- TimelineGroup.cs
- GridViewItemAutomationPeer.cs
- RenderCapability.cs
- WebPartConnectionsConnectVerb.cs
- TripleDESCryptoServiceProvider.cs
- XmlEncoding.cs
- SymmetricKey.cs
- ListenDesigner.cs
- PersonalizationStateQuery.cs
- ScriptResourceHandler.cs
- RequestFactory.cs
- Exceptions.cs
- AsymmetricAlgorithm.cs
- FunctionOverloadResolver.cs